Am un script pe care vreau să-l execut înainte ca o mașină să fie fie oprită, fie repornită:
/etc/init.d/init.sh
#!/bin/sh
### ÎNCEPE INFO INFO
# Furnizează: init.sh
# Necesar-Start: $all
# Necesar-Oprire:
# Pornire implicită: 2 3 4 5
# Oprire implicită: 0 1 6
# Scurtă descriere: xxx
# Descriere: xxx
### END INIT INFO
if [ "$1" = "start" ]; atunci
echo „mesaj de jurnal”
su - azureuser -c '/bin/bash /my/script/dir/script1.sh'
echo „mesaj de jurnal”
su - azureuser -c '/bin/bash /my/script/dir/script2.sh -p "parameter2"'
fi
if [ "$1" = "stop" ]; atunci
echo „mesaj de jurnal”
su - azureuser -c '<comandă shell>'
cd /my/script/dir/sub
./script3.sh parametrul3
su - azureuser -c 'cd /my/script/dir/sub; ./script4.sh parameter4 --option1 --option2 --option3 somevalue'
fi
iesirea 0
(Am ascuns căile și numele fișierelor, dar am păstrat structura generală pentru acest fir, evident nimic nu este numit așa cum este aici)
Scriptul rulează bine în timpul pornirii, dar se plânge că curățarea care ar fi trebuit să aibă loc în Stop
blocarea nu a fost efectuată și nu pot vedea niciun mesaj de jurnal care provine din Stop
bloc în syslog. Rularea scriptului din linia de comandă (sudo /etc/init.d/init.sh stop
) funcționează ca un farmec cu ambele start
și Stop
parametrii, așa că sunt confuz de ce nu funcționează atunci când îmi opresc mașina, destul de sigur că scripturile la nivel de rulare rulează ca root.
Următoarele legături simbolice există pe sistemul meu:
/etc/rc0.d/K01init.sh
/etc/rc1.d/K01init.sh
/etc/rc2.d/S99init.sh
/etc/rc3.d/S99init.sh
/etc/rc4.d/S99init.sh
/etc/rc5.d/S99init.sh
/etc/rc6.d/K01init.sh
care toate indică același scenariu etc/init.d/init.sh. Pe baza unui alt thread, am încercat și fără .SH
sufix, care nu a schimbat nimic.
Permisiuni pentru scenariul1
și scenariul2
sunt ambele 750
si pentru scenariul3
și scenariul4
chiar 755.
Unde gresesc aici? Rulez Ubuntu 18.04 și nivelul meu de rulare actual este 5 (dar nu ar trebui să fie relevant, deoarece ar trebui să fie aproximativ 0 și 6 aici). Scriptul în sine (inclusiv subscriptele) nu este în discuție aici, funcționează bine într-un alt mediu, iar rulările manuale duc la starea dorită în acest mediu, așa că configurarea (sau înțelegerea) mea a scripturilor de inițiere trebuie să fie greșită undeva.
Dacă este relevant: vorbesc despre reporniri atât prin sudo reboot
și prin intermediul GUI Azure (este o mașină virtuală), nu sunt sigur dacă mecanismul de repornire Azure diferă. Niciuna dintre variante nu funcționează.