Provedení příkazu po rebootu

Založil hobit, 29. 06. 2018, 00:24:48

Předchozí téma - Další téma

hobit

Zdravím.
Bojuji s nastavením systemd a spuštěním příkazu po strartu počítače. Já vím, že je toho na internetu plno, ale nenašel jsem tam nic co by mi pomohlo.
Mám Debian 8.
Po restartu počítače se mi tftpd-hpa server nespustí.

# systemctl status tftpd-hpa.service
● tftpd-hpa.service - LSB: HPA's tftp server
   Loaded: loaded (/etc/init.d/tftpd-hpa)
   Active: failed (Result: exit-code) since Thu 2018-06-28 23:42:58 CEST; 3s ago
  Process: 540 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=66)


Tak jsem přišel na to, že když ho restartuji hned potom tak to funguje:

# systemctl restart tftpd-hpa.service
# systemctl status tftpd-hpa.service
● tftpd-hpa.service - LSB: HPA's tftp server
   Loaded: loaded (/etc/init.d/tftpd-hpa)
   Active: active (running) since Thu 2018-06-28 20:54:32 CEST; 2s ago
  Process: 1189 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=0/SUCCESS)
   CGroup: /system.slice/tftpd-hpa.service
           └─1195 /usr/sbin/in.tftpd --listen --user tftp --address 172.30.11.99:69 --secure --create /srv/tftp


Tak mne napadlo, že přidám "unit" do systemd a nastavím že se má pouštět po tftp-hpa. To jsem ale narazil, protože na to prostě nemohu příjít jak systemd nastavit aby se příkaz "systemctl restart tftpd-hpa.service! pustil až po tftp-hpa.

Vytvořil jsem soubor "/etc/systemd/system/restart-tftpd-hpa.service"
----------------------------------
[Unit]
Description=Restart tftp-hpa
After=tftp-hpa.service

[Service]
Type=oneshot
ExecStart=/bin/systemctl restart tftpd-hpa.service
SuccessExitStatus=1

[Install]
WantedBy=basic.target
----------------------------------

Aktualizoval systemd a zapnul novou službu:
systemctl daemon-reload
systemctl start restart-tftpd-hpa.service
ssytemctl enable restart-tftpd-hpa.service

# systemctl list-dependencies
default.target
● ├─accounts-daemon.service
● ├─exim4.service
● ├─gdm.service
● ├─gdomap.service
● ├─irqbalance.service
● ├─minissdpd.service
● ├─ntp.service
● ├─openbsd-inetd.service
● ├─speech-dispatcher.service
● ├─systemd-update-utmp-runlevel.service
● ├─systemd-update-utmp-runlevel.service
● ├─tftpd-hpa.service
└─multi-user.target
●   ├─anacron.service
●   ├─atd.service
●   ├─cron.service
●   ├─dbus.service
●   ├─exim4.service
●   ├─gdomap.service
●   ├─hyperv-daemons.hv-fcopy-daemon.service
●   ├─hyperv-daemons.hv-kvp-daemon.service
●   ├─hyperv-daemons.hv-vss-daemon.service
●   ├─inetd.service
●   ├─irqbalance.service
●   ├─minissdpd.service
●   ├─ModemManager.service
●   ├─NetworkManager.service
●   ├─ntp.service
●   ├─openbsd-inetd.service
●   ├─pppd-dns.service
●   ├─rc-local.service
●   ├─rsyslog.service
●   ├─speech-dispatcher.service
●   ├─ssh.service
●   ├─systemd-ask-password-wall.path
●   ├─systemd-logind.service
●   ├─systemd-update-utmp-runlevel.service
●   ├─systemd-user-sessions.service
●   ├─tftpd-hpa.service
●   ├─basic.target
●   │ ├─alsa-restore.service
●   │ ├─alsa-state.service
●   │ ├─restart-tftpd-hpa.service
●   │ ├─paths.target
....

Dle pořadí závislostí je to až za tftp-hpa, takže správně.

Ale po rebootu počítače je stále "tftp-hpa" failed.

# systemctl status tftpd-hpa.service
● tftpd-hpa.service - LSB: HPA's tftp server
   Loaded: loaded (/etc/init.d/tftpd-hpa)
   Active: failed (Result: exit-code) since Thu 2018-06-28 23:42:58 CEST; 8s ago
  Process: 540 ExecStart=/etc/init.d/tftpd-hpa start (code=exited, status=66)


Zkoušel jsem měnit parametr After kam jsem přidal network.target, a jiné služby, zkoušel jsem změnit v sekci Install dát "WantedBy=multi-user.target".
Zkusil přidat parametr Requires aj.

Ale prostě mi to stále nejde.

Nenapadá někoho co dělám špatně?
Copak když dám v systemd after po nějaké službě, tak by se měla spustit až po ni, ne? V dependencies to je až po ní, ale stejně to nefunguje.
Nechápu to.

Hobit.

Roman Horník

Osobně bych to řešil trochu jinak - hodil bych to jako příkaz klasicky do /etc/rc.local (ale zachovej exit 0 na konci!). Spouští se až na konci bootovacího procesu.
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

hobit

Citace od: Roman Horník kdy 03. 07. 2018, 11:15:17
Osobně bych to řešil trochu jinak - hodil bych to jako příkaz klasicky do /etc/rc.local (ale zachovej exit 0 na konci!). Spouští se až na konci bootovacího procesu.

O rc.local jsem něco někde na internetu zahlédl, že se to musí v systemd nejdřív povolit? Funguje to vubec ještě?
Já jsem to také tedˇvyřešil trochu jinak, tím, že jsem to zadal do cronu:

crontab -e
@reboot ( sleep 5 ; /bin/systemctl start tftpd-hpa.service )

To mi funguje, ale šíleně se mi to nelíbí. :(

Chtěl jsem použít systémovou věc, proto hledám jak to udělat v "systemd", které jak jsem pochopil je náhrada za to všechno a měl by to zvládat.
Podle manuálu by to mělo být jednoduché, ale prostě mi to nefunguje.
Z návodů toprostě nejsem schopný pochopit (možná už stárnu ...)

Tak jsem si myslel, jestli tu není někdo kdo tomu rozumí víc a nevěděl by kde dělám chybu?


Roman Horník

Nemusí se povolovat, funguje. Jo a cron i rc.local systémový jsou dost, i když cron je spíš volitelnej. rc.local (i rcX.d) existujou snad už od dob System V (sysvinit) a naštěstí na ně systemd normálně slyší.
Jestli nepotřebuješ na nic jinýho cron, nech ho spát a použij rc.local.
Debian Sid/Experimental 64bit + Mate Desktop Environment
* CPU: Intel i5 3570
* GPU: NVIDIA GTX650 1GD5
* MB: Lenovo IH61M
* RAM: 16GiB Deutsche Demokratische Republik 3 @ 1600MHz

hobit

Citace od: Roman Horník kdy 03. 07. 2018, 23:01:56
Nemusí se povolovat, funguje. Jo a cron i rc.local systémový jsou dost, i když cron je spíš volitelnej. rc.local (i rcX.d) existujou snad už od dob System V (sysvinit) a naštěstí na ně systemd normálně slyší.
Jestli nepotřebuješ na nic jinýho cron, nech ho spát a použij rc.local.
Mě přijde, že musí. Když si zobrazím "systemctl | grep rc.local", tak tu službu mám vypnutou:
# systemctl | grep -i rc.local
● rc-local.service   loaded failed failed    /etc/rc.local Compatibility

Nicméně, není mým cílem to zprovoznit přes crontab, nebo rc.local. Věřím, že to fungovat bude. přes cronttab to mám nýní "ošetřeno". Ale.
Rád bych se naučil systemd a pochopil jak to v něm dělat, protože je to věc, která nahrazuje starý spoštěč a chtěl jsem to umět.
Podle návodu by to mělo být jednoduché, ale prostě mi to nefunguje. A já nechápu kde dělám chybu?

hobit

#5
Nějak jsem na to potom neměl sílu se tím zabývat.
Ale minulý týden jsem provedl upgrade na Debian Stretch a voalá ! TFTP-HPA funguje i bez workarroundu. Vymazal jsem crontab, smazal jsem pokus v ssytemd o restart služby tftp-hpa.
Takže původní cíl byl vyřešen upgradem. Takže byl někde nějaký bug. Kde? Kdo ví?

Druhý cíl, se mi bohužel nepodařil. Nedovedl jsem se naučit se systemd a nepodařilo se mi pochopit jak to vlastně funguje.

A na potřetí, za celou dobu se nenašel nikdo kdo by uměl systemd a měl hlavně ochotu pomoci. Přijde mi, že linuxová podpora komunity hrozně upadá. To dřív to bylo úplně jiné. Tak před 5-10 lety stačilo napsat a tolik lidí co se tím zabývalo a bylo hlavně ochotno pomoci, bylo super. Dnes je s podivem, že někdo odpoví. A když, tak tím stylem, udělej to takhle a dál se tím nezabývej, nepřemýšlej jak to funguje, nic se neuč, ono to tak funguje tak to neřeš. Nebo v tom horším případě (ne teda tady ale v jiných diskusích) odpovídající tazatele ještě zprdne, že je blbec, a že si to má najít v manuálu a proč vůbec pokládá dotaz, když už se to řešilo tisíckrát.
Je to smutný, ale takhle to upadá snad na všech fórech internetu :-(

Nějak nemohu najít, jestli se to dá označit jako vyřešeno? Asi ne.