8digit
Goto Top

Shutdownscript beim Systemstart ausführen funktioniert nicht

Hallo,

ich habe einen alten Server, welcher per wakeonlan täglich einmal gestartet wird.
Dieser soll dann von dem eigentlichen Hauptserver einen Ordner mit Backups kopieren und dann wieder herunterfahren.

Nun habe ich dieses Script dafür geschrieben:
debian-backup:~# cat /root/backup-raspi.sh
#!/bin/bash
Datum=`date +"%d.%m.%Y"`  
Uhrzeit=`date +"%H:%M"`  
rsync --delete -avze "ssh -p 22 -i /home/backup_key" --rsync-path='sudo /usr/bin/rsync' backupuser@192.168.2.2:/home2 /backup &> /dev/null  
echo "Backup done $Datum $Uhrzeit" >> backup_log.txt  
shutdown -h 5

Leider wird das Script beim Systemstart nicht gestartet.
Folgendes habe ich versucht

(ich habe zwichen dem @ und dem reboot ein Leerzeichen, weil es sonst ein Forumlink wäre!!!)
1)
sudo crontab -e
1.1) => @ reboot /root/backup-raspi.sh
1.2) => @ reboot root /root/backup-raspi.sh

2)
sudo nano /etc/crontab
2.1) => @ reboot /root/backup-raspi.sh
2.2) => @ reboot root /root/backup-raspi.sh


3)
ln -s /root/backup-raspi.sh /etc/rc3.d/S99backup-raspi

Leider funktionieren bei mir alle 3 Möglichkeit nicht, oder habe ich nur irgendwo ein Fehler gemacht?

Mfg. 8digit

Content-ID: 205725

Url: https://administrator.de/contentid/205725

Ausgedruckt am: 23.11.2024 um 12:11 Uhr

64748
64748 26.04.2013 aktualisiert um 23:03:50 Uhr
Goto Top
Hallo,

hast Du das Skript ausführbar gemacht? also
chmod +x /root/backup-raspi.sh

Die Anführungszeichen sind überflüssig
Datum=`date +%d.%m.%Y` 
oder
Datum=$(date +%d.%m.%Y)

Du solltest zuallererst mal ausprobieren, ob das Skript überhaupt funktioniert bevor Du es mit cron automatisierst. Und natürlich, ob es das macht, was es soll.

Teste zuerst, ob Dein rsync-Befehl so funktioniert wie er soll, teste dann das shutdown-Kommando (wieso nicht einfach "halt"?). Laut manpage müsste es eher
shutdown -t +5 -h
sein, also warte 5 Sekunden und fahre dann runter, aber ich hab das nicht ausprobiert.

Markus
8digit
8digit 26.04.2013 um 23:13:27 Uhr
Goto Top
Also das Script an sich funktioniert, wenn ich es aufrufe.

Soweit mir bekannt ist reicht shutdown -h 5 aus, um den Server erst in 5min herunterzufahren.
Falls nicht, mache ich das all die Jahre schon falsch und es funktioniert trotzdem.
Man macht doch auch shutdown -h now oder einfach nur halt.

In welcher man Page steht denn bei den optionen ein -t?
http://linux.die.net/man/8/shutdown
64748
64748 26.04.2013 aktualisiert um 23:24:36 Uhr
Goto Top
Das kann gut sein. Ich will nicht behaupten, dass das ein Fehler im Skript ist, ich hatte nur mal in die manpage gesehen und gelesen, dass
-t sec Tell init(8) to wait sec seconds between sending processes the warning and the kill signal, before changing to another runlevel

und

The time argument can have different formats. First, it can be an absolute time in the format hh:mm, in which hh is the hour (1 or 2 digits)
and mm is the minute of the hour (in two digits). Second, it can be in the format +m, in which m is the number of minutes to wait. The word
now is an alias for +0.
Das ist die manpage auf meinem Rechner.

Wie sehen denn die crontab Einträge aus?

Und wie ist es mit den Berechtigungen? Das Skript soll ja mit root-Rechten ausgeführt werden. Ist das so?

Markus

PS: und crond läuft?
64748
64748 26.04.2013 um 23:27:14 Uhr
Goto Top
Und eine weitere Frage ist: kann denn crond im /root/ Verzeichnis überhaupt auf das Skript zugreifen? Ich würde auf meinem System ein solches Skript in /usr/local/sbin speichern.

Markus
Guenni
Guenni 27.04.2013 um 00:03:07 Uhr
Goto Top
Hi 8digit,

Scripte, die beim Starten/Beenden aufgerufen werden sollen, legt man im Ordner /etc/init.d ab.

Mit dem Befehl update-rc.d kannst du die Links zu dem Script in den Runlevelordnern rcX.d anlegen.

update-rc.d -n scriptname defaults

-n: Die Links werden nicht angelegt, es wird nur ausgegeben, was passieren würde.

defaults: Es werden Standardlinks angelegt.

Die Ausgabe für ein Script firewall könnte dann so aussehen:

update-rc.d -n firewall defaults

Ausgabe am Monitor:

 Adding system startup for /etc/init.d/firewall ...

   /etc/rc0.d/K20firewall -> ../init.d/firewall
   /etc/rc1.d/K20firewall -> ../init.d/firewall
   /etc/rc6.d/K20firewall -> ../init.d/firewall
   /etc/rc2.d/S20firewall -> ../init.d/firewall
   /etc/rc3.d/S20firewall -> ../init.d/firewall
   /etc/rc4.d/S20firewall -> ../init.d/firewall
   /etc/rc5.d/S20firewall -> ../init.d/firewall

K steht für Kill, S steht für Start. Die Zahl für die Reihenfolge, in der die Scripte gestartet/gekillt werden.

Mehr unter man update-rc.d, oder einfach mal Googlen.

Ich würde das mal mit einem einfachen Script testen, das einfach nur echo "Guten Morgen" ausgibt.

Dann siehst du ja, ob es beim Start aufgerufen wird.

Gruß
Günni
8digit
8digit 27.04.2013 um 00:43:17 Uhr
Goto Top
ah perfekt,

das hat Funktioniert.

Danke Danke Danke^^