Autor Téma: Provedení příkazu po rebootu  (Přečteno 220 krát)

Offline hobit

  • Nováček
  • *
  • Příspěvků: 3
    • Zobrazit profil
Provedení příkazu po rebootu
« kdy: 29. 06. 2018, 00:24:48 »
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.

Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.303
    • Zobrazit profil
  • Jabber: roman.hornik@jabber.cz
Re:Provedení příkazu po rebootu
« Odpověď #1 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.
Debian Sid 64bit + Mate Desktop Environment
* CPU: Intel Core2 Quad Q9400
* GPU: NVIDIA GTX650 1GD5
* MB: Aušus P5B
* RAM: 6GiB Deutsche Demokratische Republik 2

Offline hobit

  • Nováček
  • *
  • Příspěvků: 3
    • Zobrazit profil
Re:Provedení příkazu po rebootu
« Odpověď #2 kdy: 03. 07. 2018, 12:11:38 »
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:

Kód: [Vybrat]
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?


Offline Roman Horník

  • Hlavní moderátor
  • Aktivní­ uživatel
  • *****
  • Příspěvků: 1.303
    • Zobrazit profil
  • Jabber: roman.hornik@jabber.cz
Re:Provedení příkazu po rebootu
« Odpověď #3 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.
Debian Sid 64bit + Mate Desktop Environment
* CPU: Intel Core2 Quad Q9400
* GPU: NVIDIA GTX650 1GD5
* MB: Aušus P5B
* RAM: 6GiB Deutsche Demokratische Republik 2

Offline hobit

  • Nováček
  • *
  • Příspěvků: 3
    • Zobrazit profil
Re:Provedení příkazu po rebootu
« Odpověď #4 kdy: 05. 07. 2018, 01:45:15 »
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?