[REZOLVAT]
A fi puțin încăpățânat este, uneori, calea bună pentru o soluție. Cu toate acestea, mulțumesc pentru contribuții.
După câteva cercetări bazate pe linkul comentariului meu anterior (răspunsul lui Sebastian Stark), am ajuns să am acest script (să-i spunem âmyoffscriptâ) în folderul meu /etc/init.d:
#!/bin/sh
### ÎNCEPE INFO INFO
# Necesar-Start: $local_fs
# Necesar-Oprire: $local_fs
# Oferă: Shutdown or Reboot Exec
# Pornire implicită: 4
# Oprire implicită: 0 6
# Descriere: Oprire sau Repornire
### END INIT INFO
cazul „$1” în
Stop)
echo $(data) >> /ZZZdate # ÎNLOCUIȚI EXEMPLUL ANTERIOR: EXECUTĂ COMANDILE DE OPRIRE/REBOOTARE AICI
;;
esac
iesirea 0
În ceea ce privește scriptul de mai sus, cel mai important de evidențiat este:
1 - Antetul LSB (Linux Standard Base). Nivelurile de rulare â âDefault-Startâ și âDefault-Stopâ trebuie să fie ambele prezente, corespunzând â0â pentru oprire (rc0.d) și â6â pentru repornire (rc6.d). Întrucât scriptul meu este doar pentru închidere și repornire și trebuie specificată „Pornire implicită”, am ales „4” (rc4.d), care nu este utilizat/definibil de utilizator. Dar ar trebui să fie la nivelul de rulare â2â (rc2.d) dacă este nevoie de pornirea a ceva la momentul pornirii (cum ar fi un serviciu, un demon,...)
2 - Expunerea cauzei - Pe măsură ce scrip-ul este executat de systemd ca serviciu cu argumentele „start” sau „stop” conform „Default-Start” și „Default-Stop” din antetul LSB, toate comenzile trebuie să fie în interiorul carcasei afirmație. (Comenzile înainte de declarația cazului au fost ignorate în testele mele.) Corespunzător nivelurilor de rulare â0â și â6â, declarația mea de caz are doar Stop) opțiune, dar dacă este necesară rularea la pornire, a start) ar trebui inclusă opțiunea (și nivelul de rulare â2â trebuie specificat în antetul LSB âDefault-Startâ).
Acum, hai să o facem să funcționeze.
Mai întâi faceți executabil scriptul /etc/init.d/myoffscript.
Apoi, avem două opțiuni - cu a comanda sau manual.
Cu o comandă:
# systemctl enable myoffscript
sau
# /lib/systemd/systemd-sysv-install enable myoffscript
Legăturile simbolice relative vor fi create automat în folderele rc*.d corespunzătoare (S01myoffscript în rc4.d și K01myoffscript în rc0.d și rc6.d conform scriptului de mai sus)
Comenzile vor funcționa numai dacă legăturile nu au fost create înainte. În caz contrar, erorile vor fi raportate.
Manual:
Din fiecare folder rc*.d creați legătura simbolică
# cd /etc/rc4.d
# ln -s ../init.d/myoffscript S01myoffscript
# cd /etc/rc0.d
# ln -s ../init.d/myoffscript K01myoffscript
# cd /etc/rc6.d
# ln -s ../init.d/myoffscript K01myoffscript
Notă: dacă nivelul de rulare â2â a fost specificat în âDefault-Startâ, primul link ar trebui creat în /etc/rc2.d și așa mai departe...
Reporniți sistemul și totul ar trebui să funcționeze.
Acesta este singurul mod pe care l-am găsit de a rula un script ca root atât la oprire, cât și la repornire cu Ubuntu 20.04
Notă: În ciuda faptului că /etc/int.d și /etc/rc2.d metoda link-urilor încă funcționează pentru a rula scripturi/comenzi la pornire, așa cum am menționat în linkul meu de comentariu anterior, un abordarea pe termen lung ar fi convertirea scripturilor init în unități de servicii systemd, astfel încât antetul LBS cu metoda declarației caz descrisă mai sus poate fi util pentru scripturi/comenzi de pornire în câteva timpuri.