Automatikus E-mail küldés rendszer újraindulás esetén

Fórumok

Sziasztok!

 

Jóideje használom a cron @reboot opcióját, hogy egy esetleges újraindulás után a gép küldön egy emailt. Valamiért a frissen telepített gépemen nem akar működni. Amint feláll a rendszer szépen mennek az emailek, de a boot során valamiért nem. Tudna nekem tanácsot adni valaki ezzel kapcsolatban? Küldésre a mutt-ot használom, és a sendmail-lel van konfigurálva a gmail fiókom. A rendszer egy Ubuntu 24.04 LTS Server.

 

Köszönöm

Hozzászólások

A sendmailnek elvileg net hiányában is be kéne rakni spool-ba a leveleket és kiküldeni amint tudja, de lehet pl. dns ami nem tetszik neki amikor még indul a rendszer (ez olyat is okozhat, hogy lassan indul tőle a sendmail - manapság már nem olyan triviális dependency alapján sorban egyesével induló a boot folyamat - szóval simán lehet hogy túl korán fut a mutt amikor még nem fut a sendmail és elveszik a levél, ezt a @reboot scriptedbe tett sleep 5m -mel, nyilván a mutt sor előtt ellenőrizheted, ha akkor jó akkor erre keresgélj)

A logokban nincs semmi?

Nálam postfix van, és mailx-el küldöm reboot-kor is a levelet és így tökéletesen jól működik.

Az rc.local használata màr nem divat?

ok, de mit használtok helyette?

 

sudo systemctl status rc-local.service 
[sudo] oregon jelszava: 
● rc-local.service - /etc/rc.local Compatibility
     Loaded: loaded (/lib/systemd/system/rc-local.service; enabled-runtime; vendor preset: enabled)
    Drop-In: /usr/lib/systemd/system/rc-local.service.d
             └─debian.conf
     Active: active (exited) since Tue 2024-07-16 09:33:40 CEST; 4 days ago
       Docs: man:systemd-rc-local-generator(8)
    Process: 1867 ExecStart=/etc/rc.local start (code=exited, status=0/SUCCESS)
        CPU: 5ms

 

dpkg -S /lib/systemd/system/rc-local.service
systemd: /lib/systemd/system/rc-local.service

 

miert is? ez szerinted mi a csuda? :D

cat /lib/systemd/system/rc-local.service

#  SPDX-License-Identifier: LGPL-2.1-or-later
#
#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

# This unit gets pulled automatically into multi-user.target by
# systemd-rc-local-generator if /etc/rc.local is executable.
[Unit]
Description=/etc/rc.local Compatibility
Documentation=man:systemd-rc-local-generator(8)
ConditionFileIsExecutable=/etc/rc.local
After=network.target

[Service]
Type=forking
ExecStart=/etc/rc.local start
TimeoutSec=infinity
RemainAfterExit=yes
GuessMainPID=no

nekem ez kapasbol bonyolultabbnak tunik, mint a legalapabb oneshot unit :) es meg csak nem is tudod egyesevel enable/disable-re rakosgatni, szerkesztgetheted az egyetlen scripted, ami ha feluton valahol elhasal nezhetsz, hogy a masik fele vajon miert nem futott le :) vagy, mint a mellekelt abra mutatja, nem nagyon tudod dependalni, szerencse(d)re a systemd-s sracok pont default beleraktak a network-on-t :) viszont ez meg azert sz*r, mert mi van ha halozat nelkul is le kene fusson? o.O ja, akkor besz*ptad...
(olyan aprosagokrol, mint a kulon ENV, journal unit log, stb. mar szot sem ejtek)
de kinek a papne

/etc/rc.local-rol beszelunk, es, hogy miert sz*r van jobb megoldas. :) eshogy manapsag egy ugyanolyan unit inditja mint barmi mast is.
fenti miatt, ha neked bonyi vagy kenyelmetlen egy simple unit mgirasa/managelese, akkor a modern rc-local sem neked valo, nem fogod erteni mitol mukodik (vagy sem es hogyan).

ha minden  egyes dologhoz írnék egy sytemd indító scriptet az > kontrolcekontrolve. alig par sorral tobb, mint egy #!/bin/bash :D es a lentin meg lehet is kurtitani, ha pl. nem kell denpendelni semmire.
több hiba lehetőség > kevesebb. ha elolvastad volna fentebb, belatnad tenmagad is. " ha feluton valahol elhasal nezhetsz, hogy a masik fele vajon miert nem futott le" ha meg a bashscriptben kell hibakezelned, logozast implementalnod, na, az egy nagysagrenddel bonyibb, mint egy unit 5-6 sorbol. :)

Nem gondolom hogy a sysvinit fog visszatérni, nem is kívánnám. De a systemd-nél azért el tudok képzelni jobbat.

Heck, összeszedném magam egy picit, még valószínű meg is tudnám írni, azért egy init rendszer nem atomtudomány (legalábbis a systemd előtt nem volt az). Csak kinek van arra ideje.

nem atomtudomány (legalábbis a systemd előtt nem volt az).

meg is volt a baja, es korbe kellett takolni hogy rendesen menjen. amit meg most bydefault tud a systemd.

en meg emlekszem a monit es tarsaira ami kellett hogy restartolni lehessen egy kilepett servicet. vagy a jo kis prestart pingelesre hogy megvan-e a halozat. stbstb.

A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

A hálózat meglétére sajnos továbbra is írni kell valamit. A múltkoriban írtam, hogy a DHCP daemon (kea) hiába volt úgy beállítva, hogy a hálózat indulása után induljon, elindult előtte, mert a network hamarabb jelezte vissza, hogy összejött a hálózat, minthogy az interface be lett konfigurálva. Nos, ez elvileg megoldódott, legalábbis akkor azt hittem. Aztán két alkalommal is megtörtént, hogy áramszünet után elindult a daemon úgy, hogy nem volt mire bind-oljon, a logokból nagyjából azt vettem ki, hogy mivel a router még nem állt készen (meg a switch sem), így hiába lett beállítva a hálózat, az interface még nem volt UP-ban, de látszólag kész volt, de a kea-nak nem tetszett.

Most írtam egy egysoros scriptet, ami pingeli a gatewayt, és akkor lép ki, ha ez sikeres, és ebből csináltam egy systemd unitot, amit meg kell várjon a DHCP service. Élesben még nem próbáltam ki.

Szerkesztve: 2024. 07. 20., szo – 10:33

Nekem is működik a 22.04 LTS rendszeren. Az új gépen viszont 24.04 LTS alatt nem. Mindkét gépen ugyanazok a beállítások. Csak a reboot folyamán nem jön az email. Utána már minden rendben. 

 

/var/log/mail.log:

2024-07-20T10:25:18.305567+02:00 localhost sendmail[856]: 46K8PIiI000856: to=root, ctladdr=root (0/0), delay=00:00:00, xdelay=00:00:00, mailer=relay, pri=30374, relay=[127.0.0.1] [127.0.0.1], dsn=4.4.1, stat=Deferred: Connection refused by [127.0.0.1]
 

csinalj egy mezei service-t es tedd fuggove a postfixtol (vagy amit hasznalsz.)
ha nem local az mtu, akkor pedig siman a network-online-tol

Wants=network-online.target
After=network.target vagy network-online.target < ami nalad van.

pl:

[Unit]
Description=StartUpMailScript Service
Requires=postfix.service
After=postfix.service


[Service]
ExecStart=/path/to/mailscript.sh
Type=oneshot

[Install]
WantedBy=multi-user.target

majd a szokasos systemctl enable es tarsai :)

Szerkesztve: 2024. 07. 20., szo – 13:18

 

ne @cron triggereljen, hanem van erre systemd timer. (OnBootSec=1m), a service meg type=oneshot.

Ezt egészen pontos hogy is kivitelezzem?