PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script startet nicht beim booten



Chaoshh
14.12.09, 12:45
Ich habe ein Script, das automatisch starten soll. Also manuell kann ich es starten - ohne Probleme. Aber über den Link in /etc/init.d/rc3.d geht das irgendwie nicht. Das Script startet eigentlich nur ein anderes.

Das Script ( script1.sh ):


#!/bin/sh

sleep 3
echo "bitte warten..."

sleep 3
/home/super7/script2.sh start
sleep 4
echo "script laeuft"


Link im Ordner rc3.d (runlevel 3):


270846 0 lrwxrwxrwx 1 root root 25 Dec 13 13:28 scr1launch -> /home/super7/script1.sh

pferdefreund
14.12.09, 12:53
Die muessen doch S20script oder S30 oder so heissen - S für Start und nummer für Reihenfolge

Chaoshh
14.12.09, 14:17
Die Reihenfolge in der die Links "gezündet" werden?

Der Inhalt des Verzeichnisses rc3.d sieht so aus:


total 8
318242 4 drwxr-xr-x 2 root root 4096 Dec 13 13:28 .
310081 4 drwxr-xr-x 11 root root 4096 Dec 14 12:52 ..
261209 0 lrwxrwxrwx 1 root root 8 Dec 12 17:58 K01acpid -> ../acpid
261208 0 lrwxrwxrwx 1 root root 9 Dec 12 17:58 K01auditd -> ../auditd
261172 0 lrwxrwxrwx 1 root root 7 Dec 12 17:58 K01cron -> ../cron
261204 0 lrwxrwxrwx 1 root root 15 Dec 12 17:58 K01irq_balancer -> ../irq_balancer
261198 0 lrwxrwxrwx 1 root root 6 Dec 12 17:58 K01kbd -> ../kbd
261192 0 lrwxrwxrwx 1 root root 7 Dec 12 17:58 K01nscd -> ../nscd
261182 0 lrwxrwxrwx 1 root root 9 Dec 12 17:58 K01random -> ../random
267231 0 lrwxrwxrwx 1 root root 9 Dec 12 17:59 K01smartd -> ../smartd
270927 0 lrwxrwxrwx 1 root root 6 Dec 13 07:36 K01smb -> ../smb
261178 0 lrwxrwxrwx 1 root root 9 Dec 12 17:58 K01splash -> ../splash
261183 0 lrwxrwxrwx 1 root root 15 Dec 12 17:58 K01splash_early -> ../splash_early
270842 0 lrwxrwxrwx 1 root root 7 Dec 12 18:01 K01sshd -> ../sshd
261173 0 lrwxrwxrwx 1 root root 7 Dec 12 18:00 K02cups -> ../cups
261194 0 lrwxrwxrwx 1 root root 8 Dec 12 17:58 K02fbset -> ../fbset
261171 0 lrwxrwxrwx 1 root root 10 Dec 12 17:58 K02postfix -> ../postfix
267218 0 lrwxrwxrwx 1 root root 6 Dec 13 07:36 K03ntp -> ../ntp
261184 0 lrwxrwxrwx 1 root root 19 Dec 13 07:36 K04network-remotefs -> ../network-remotefs
261200 0 lrwxrwxrwx 1 root root 12 Dec 13 07:36 K05haldaemon -> ../haldaemon
261177 0 lrwxrwxrwx 1 root root 6 Dec 13 07:36 K05nfs -> ../nfs
270787 0 lrwxrwxrwx 1 root root 8 Dec 13 07:36 K05smbfs -> ../smbfs
270931 0 lrwxrwxrwx 1 root root 6 Dec 13 07:37 K06nmb -> ../nmb
261205 0 lrwxrwxrwx 1 root root 10 Dec 13 07:36 K06rpcbind -> ../rpcbind
261175 0 lrwxrwxrwx 1 root root 9 Dec 13 07:36 K07syslog -> ../syslog
261186 0 lrwxrwxrwx 1 root root 14 Dec 13 07:36 K08earlysyslog -> ../earlysyslog
261190 0 lrwxrwxrwx 1 root root 10 Dec 13 07:36 K08network -> ../network
261206 0 lrwxrwxrwx 1 root root 7 Dec 13 07:36 K09dbus -> ../dbus
261197 0 lrwxrwxrwx 1 root root 8 Dec 12 17:58 S01acpid -> ../acpid
261176 0 lrwxrwxrwx 1 root root 7 Dec 12 17:58 S01dbus -> ../dbus
261193 0 lrwxrwxrwx 1 root root 14 Dec 12 17:58 S01earlysyslog -> ../earlysyslog
261195 0 lrwxrwxrwx 1 root root 8 Dec 12 17:58 S01fbset -> ../fbset
261187 0 lrwxrwxrwx 1 root root 9 Dec 12 17:58 S01random -> ../random
261180 0 lrwxrwxrwx 1 root root 12 Dec 12 17:58 S02haldaemon -> ../haldaemon
261185 0 lrwxrwxrwx 1 root root 10 Dec 12 17:58 S02network -> ../network
261191 0 lrwxrwxrwx 1 root root 9 Dec 12 17:58 S03syslog -> ../syslog
261203 0 lrwxrwxrwx 1 root root 9 Dec 12 17:58 S04auditd -> ../auditd
270930 0 lrwxrwxrwx 1 root root 6 Dec 13 07:37 S04nmb -> ../nmb
261196 0 lrwxrwxrwx 1 root root 10 Dec 12 17:58 S04rpcbind -> ../rpcbind
261181 0 lrwxrwxrwx 1 root root 15 Dec 12 17:58 S04splash_early -> ../splash_early
261199 0 lrwxrwxrwx 1 root root 6 Dec 12 17:58 S05nfs -> ../nfs
270786 0 lrwxrwxrwx 1 root root 8 Dec 12 18:00 S05smbfs -> ../smbfs
261174 0 lrwxrwxrwx 1 root root 6 Dec 12 17:58 S06kbd -> ../kbd
261210 0 lrwxrwxrwx 1 root root 7 Dec 12 17:58 S07cups -> ../cups
261202 0 lrwxrwxrwx 1 root root 15 Dec 12 17:58 S07irq_balancer -> ../irq_balancer
261201 0 lrwxrwxrwx 1 root root 19 Dec 12 17:58 S07network-remotefs -> ../network-remotefs
261188 0 lrwxrwxrwx 1 root root 9 Dec 12 17:58 S07splash -> ../splash
270841 0 lrwxrwxrwx 1 root root 7 Dec 12 18:01 S07sshd -> ../sshd
270920 0 lrwxrwxrwx 1 root root 6 Dec 13 07:24 S08ntp -> ../ntp
261179 0 lrwxrwxrwx 1 root root 10 Dec 12 17:58 S09postfix -> ../postfix
261207 0 lrwxrwxrwx 1 root root 7 Dec 12 17:58 S10cron -> ../cron
261189 0 lrwxrwxrwx 1 root root 7 Dec 12 18:00 S10nscd -> ../nscd
267230 0 lrwxrwxrwx 1 root root 9 Dec 12 17:59 S10smartd -> ../smartd
270921 0 lrwxrwxrwx 1 root root 6 Dec 13 07:36 S10smb -> ../smb


Also habe ich so ein Link angelegt:


~# ln -s /home/super7/script1.sh /etc/init.d/rc3.d/S11script1


Doch es startet immer noch nicht. Muss ich da noch was irgendwo eintragen oder was kann das sein?

HirschHeisseIch
14.12.09, 15:33
Wie sehen die Rechte auf /home/super7/script1.sh aus?
Liegt /home auf einer eigenen Partition? Wie sehen dann ggf. die Rechte da aus?

Edit:
Denke nicht, dass es einen Unterschied macht, aber ggf. solltest Dein Script dann auch "script1" nennen, oder den Link "S11script1.sh"

Chaoshh
14.12.09, 15:40
Ja, der liegt auf einer eigenen Partition. So sehen die Rechte für die Inhalte von /home/super7/ aus:



total 40
32770 4 drwxr-xr-x 2 root root 4096 Dec 14 12:09 .
2 4 drwxr-xr-x 6 root root 4096 Dec 13 14:35 ..
27 4 -rwxr-xr-x 1 root root 516 Dec 14 08:53 stage1.sh
41 4 -rwxr-xr-x 1 root root 1272 Dec 14 17:34 stage2.sh
39 4 -rwxr-xr-x 1 root root 1236 Dec 14 19:34 backuphome.sh
44 4 -rwxr-xr-x 1 root root 742 Dec 14 20:06 backup2.sh
31 8 -rwxr-xr-x 1 root root 7962 Dec 13 20:24 script1.sh
29 4 -rwxr-xr-x 1 root root 752 Dec 13 22:09 script2.sh
37 4 -rwxr-xr-x 1 root root 115 Dec 14 07:35 script3.sh


Die Rechte auf dem Verzeichnis /home sind seit der Installation unverändert.

Chaoshh
14.12.09, 17:49
Könnte es sein, daß nur Scripte die in /etc liegen über die symlinks gestartet werden können ?

craano
14.12.09, 17:52
Ja, der liegt auf einer eigenen Partition.
Ist denn die Partitoin schon ins System eingebunden wenn das Skript ausgeführt werden soll?

Grüße.
craano.

kreol
14.12.09, 19:58
Und hat die Partition auch ein exec-flag? Auch die, auf der das eigentlich zu startende liegt... Darüber gibt "mount" Auskunft.

Ansonsten: Um welche Distri geht es eigentlich? Geht es etwas genauer als "geht das irgendwie nicht"?


Kreol

Chaoshh
14.12.09, 20:16
Es ist openSuse 11.2. Die Partition /home ist selbstverständlich gemounted. Hier Auszug aus mount:


/dev/md0 on / type ext4 (rw,acl,user_xattr)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
debugfs on /sys/kernel/debug type debugfs (rw)
udev on /dev type tmpfs (rw)
devpts on /dev/pts type devpts (rw,mode=0620,gid=5)
/dev/md2 on /boot type ext4 (rw,acl,user_xattr)
/dev/md1 on /home type ext4 (rw,acl,user_xattr)
securityfs on /sys/kernel/security type securityfs (rw)
/proc on /var/lib/ntp/proc type none (ro,bind)

HBtux
14.12.09, 21:57
in welchem Runlevel startet Dein Linux?

Wie sieht das script2.sh aus?

Was sagen die Log-Files /var/log/messages und boot.msg?


Trage mal die folgenden Zeilen in Dein Start-Script script1 ein und speiche das Script im Verzeichnis /etc/init.d ab.
(das ganze nennt sich insserv)

Inhalt script1


#!/bin/sh

### BEGIN INIT INFO
# Provides: script1
# Required-Start: $network
# X-UnitedLinux-Should-Start:
# Required-Stop: $network
# Default-Start: 3 5
# Default-Stop: 0 2 1 6
# Description: mein script1 start-script
### END INIT INFO

# Source SuSE config
. /etc/rc.status

rc_reset

case "$1" in
start)
echo -n "Starting script1"
startproc /home/super7/script2.sh
# Remember status and be verbose
rc_status -v
;;
stop)
echo -n "Stopping script1"
#hier den kill Befehl eintragen...
rc_status -v
;;
restart)
$0 stop
$0 start
rc_status
;;
status)
#hier einen ps Befehl eintragen, mit dem das Script geprüft wird....
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
;;
esac
rc_exit



Dann die selber angelegten Link S11script1 im rc3.d Verzeichnis löschen und die Links mit dem folgenden Befehl automatisch anlegen lassen.


/usr/lib/lsb/install_initd script1


Wenn alles geklappt hat, solltest Du im Verzeichnis rc3.d und rc5.d jeweils ein Link S..script1 und K..script1 haben.

Händisch auf der Konsole kannst Du das Script dann mit den folgenden Befehlen steuern.


/etc/init.d/script1 start
/etc/init.d/script1 stop
/etc/init.d/script1 restart
/etc/init.d/script1 status

kreol
15.12.09, 08:20
Die Frage war nicht, ob die Partition gemountet ist, sondern ob Dateien, die auf ihr liegen, auch ausgeführt werden können ("exec-flag").
...
noexec:
Do not allow direct execution of any binaries on the mounted file system. (Until recently it was possible to run binaries anyway using a command like /lib/ld*.so
/mnt/binary. This trick fails since Linux 2.4.25 / 2.6.0.)
...Scheint aber so zu sein.

Ich kenne die SuSE nicht, aber afaik ist das schon genannte insserv dort das Mittel der Wahl um Startskripte (die aber einem bestimmten Format entsprechen müssen) einzubinden. Ansonsten kannst Du Dir auch mal chkconfig ansehen, das macht praktisch dasselbe.

Versuchsweise kannst Du den Aufruf auch mal in die /etc/init.d/boot.local legen.


Kreol

Chaoshh
15.12.09, 09:59
Versuchsweise kannst Du den Aufruf auch mal in die /etc/init.d/boot.local legen.


Das war des Rätsels Lösung. Offenbar hat sich viel verändert seit Suse 10.2 ( damit hatte ich bisher gearbeitet ). Damals erstellte man nur symlinks, jetzt macht man es offenbar so. Nicht verwunderlich wenn ich mir so anschaue, was alles sich von Version zu Version verändert.

Danke schön für Eure Hilfe!

craano
15.12.09, 15:12
Die Frage war nicht, ob die Partition gemountet ist, sondern ob Dateien, die auf ihr liegen, auch ausgeführt werden können ("exec-flag").Scheint aber so zu sein.

Meine Frage zielte schon darauf ab, ob die Partition schon gemountet ist, wenn das Skript ausgeführt werden soll.
Ich weiß nicht genau zu welchem Zeitpunkt Suse beim Systemstart alle Partitionen einbindet. Vielleicht steht /home noch icht zur Verfügung wenn das init-Skript ausgeführt wird. Dann müßte man dem Skript eine höhere Nummer verpassen oder den Start etwas verzögern (sleep 10).
Der Workaround funktioniert vielleicht nur deshalb, weil afaik /etc/init.d/boot.local erst ganz zum Schluss, nach allen init-Skripten, ausgeführt wird, dann sind auf jeden Fall alle Partitionen aus der /etc/fstab gemountet.

Grüße.
craano.

kreol
15.12.09, 19:03
Meine Frage zielte schon darauf ab, ob die Partition schon gemountet ist, wenn das Skript ausgeführt werden soll.Deine ja, aber meine nicht ;) Mir ging es nur um das exec und ich hatte bei meiner #11 Deinen vorhergehenden Post schon nicht mehr im Sinn ;)
Wobei Du natürlich recht hast. Je nachdem, wann das initscript ausgeführt wird kann es auch schon Probleme beim reinen Mounten geben, unabhängig von der Frage der Options.
Der Workaround funktioniert vielleicht nur deshalb, weil afaik /etc/init.d/boot.local erst ganz zum Schluss, nach allen init-Skripten, ausgeführt wird, dann sind auf jeden Fall alle Partitionen aus der /etc/fstab gemountet.Eher unwahrscheinlich, bei mir in der (jungfräulichen) boot.local steht
#! /bin/sh
...
# script with local commands to be executed from init on system startup
#
# Here you should add things, that should happen directly after booting
# before we're going to the first run level.
...Also dürfte, was da drin steht, schon recht früh ausgeführt werden.

Ich glaube auch nicht, dass
Damals erstellte man nur symlinks, jetzt macht man es offenbar so.so zutrifft. Afaik macht auch die SuSE das vorzugsweise nach wie vor noch über symlinks in der entsprechenden rcX.d (halt via insserv bzw. chkconfig eingebunden bzw. über den Runleveleditor von YaST). Aber wenn es auch mit der boot.local funktioniert...


Kreol

craano
15.12.09, 19:12
Eher unwahrscheinlich, bei mir in der (jungfräulichen) boot.local steht
#! /bin/sh
...
# script with local commands to be executed from init on system startup
#
# Here you should add things, that should happen directly after booting
# before we're going to the first run level.
...Also dürfte, was da drin steht, schon recht früh ausgeführt werden.


Ich benutze leider keine Suse, sondern Ubuntu/Debian. Da gibt es keine /etc/init.d/boot.local
Das Pendant dürfte wohl die /etc/rc.local sein. Die wird allerdings etwas später abgearbeitet.

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

Daher rührte meine Frage.
Kleine distributionsspezifische Unterschiede...

Grüße.
craano.