cocons
Anmeldungsdatum: 4. August 2008
Beiträge: Zähle...
|
Hi,
ich habe ein simples Shellskript erstellt, in init.d kopiert und mit update-rc.d auch in sämtliche runlevel einfügen lassen.
Nur aufgerufen wird es nicht. Von Hand gestartet, gehts. Das Skript macht einen smbmount damit das Laufwerk immer zur Verfügung steht.
|
prometheus0815
Anmeldungsdatum: 12. Juni 2006
Beiträge: 7478
|
cocons schrieb: Hi,
ich habe ein simples Shellskript erstellt, in init.d kopiert und mit update-rc.d auch in sämtliche runlevel einfügen lassen.
Nur aufgerufen wird es nicht. Von Hand gestartet, gehts.
Hast Du Dich an die Konventionen (z.B. S<Nummer>Name) gehalten? Hast Du definiert, welche Dienste vorher gestartet sein müssen (z.B. Netzwerk)?
Das Skript macht einen smbmount damit das Laufwerk immer zur Verfügung steht.
Und warum löst Du das nicht über eine Zeile in /etc/fstab, wie es sich gehört?
|
cocons
(Themenstarter)
Anmeldungsdatum: 4. August 2008
Beiträge: 34
|
prometheus0815 schrieb:
Hast Du Dich an die Konventionen (z.B. S<Nummer>Name) gehalten? Hast Du definiert, welche Dienste vorher gestartet sein müssen (z.B. Netzwerk)?
Das Skript sollte mit S99 gestartet werden, also ganz am Schluß. Aber irgendwie wird es gar nicht aufgerufen.
Das Skript macht einen smbmount damit das Laufwerk immer zur Verfügung steht.
Und warum löst Du das nicht über eine Zeile in /etc/fstab, wie es sich gehört?
Ich will mir die fstab nicht zerschiessen und dann das System beim Neustart aufhängen.
|
plheisenstein
Anmeldungsdatum: 15. März 2009
Beiträge: 255
|
Also wenn ein Script mit S beginnt heißt dass dass es beim Starten des Runlevels aufgerufen wird, beginnt es mit K wird es beim Beenden des Runlevels aufgerufen, vielleicht probierst Du's mal mit K99 Es gibt üprigens auch graphische Hilfmittel um in der Konsole die Scripte zu verwalten: sysv-rc-conf : sysv-rc-conf rcconf : rcconf sysvconf : sysvconfig, service
|
cocons
(Themenstarter)
Anmeldungsdatum: 4. August 2008
Beiträge: 34
|
plheisenstein schrieb: Also wenn ein Script mit S beginnt heißt dass dass es beim Starten des Runlevels aufgerufen wird, beginnt es mit K wird es beim Beenden des Runlevels aufgerufen, vielleicht probierst Du's mal mit K99 Es gibt üprigens auch graphische Hilfmittel um in der Konsole die Scripte zu verwalten: sysv-rc-conf : sysv-rc-conf rcconf : rcconf sysvconf : sysvconfig, service
Damit habe ichs nochmal geprüft, es ist überall drin aber läuft nicht ☹
|
prometheus0815
Anmeldungsdatum: 12. Juni 2006
Beiträge: 7478
|
cocons schrieb: Ich will mir die fstab nicht zerschiessen und dann das System beim Neustart aufhängen.
Kopieren, schlimmstenfalls Live-CD und zurück kopieren...?
|
xabbuh
Anmeldungsdatum: 25. Mai 2006
Beiträge: 6411
|
Was sagt ls -l in den jeweiligen Runleveln /etc/rcX.d und in /etc/init.d zu deinem Skript bzw. den Symlinks?
|
plheisenstein
Anmeldungsdatum: 15. März 2009
Beiträge: 255
|
Zur Not schreib mal ein
echo läuft >> /boot.log Wenn dann beim nächsten booten in boot.log was drin steht wirds zumindest schon mal ausgeführt
|
cocons
(Themenstarter)
Anmeldungsdatum: 4. August 2008
Beiträge: 34
|
plheisenstein schrieb: Zur Not schreib mal ein
echo läuft >> /boot.log
Tzefix.
Das echo geht, alles andere in dem Skript nicht.
Die Pfade sind alle absolut eingetragen, also /usr/... usw. Von Hand aufgerufen in der Shell gehts auch. Per ls -l sind die Verlinkungen auch zu sehen und stimmen.
|
plheisenstein
Anmeldungsdatum: 15. März 2009
Beiträge: 255
|
Nix "Tzefix" - Jhuuu wir sind schon mal einen Schritt weiter, es wird also ausgeführt 😉 Hat das BashScript denn die Form wie in /etc/init.d/skeleton ? (Das Thema ist nervig, ich weiß, hab das selbst schon mal durch - ständig rauf und runter fahren.... Ich hab mein Script (ein Stopscript allerdings, das führt nur beim Runterfahren was aus) noch etwas vereinfacht:
#!/bin/bash
# my halt routines
# Attention: /bin/sh = dash!
#
#
#
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=my_halt
DESC="my halt"
do_halt()
{
# hier kommt der code rein
}
case "$1" in
start|force-start)
;;
stop)
do_halt
;;
force-reload|restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart|force-reload|force-start}" >&2
exit 1
;;
esac
exit 0 Jetzt kannst ja mal verschiedene echo reinschreiben um rauszufinden wie weit er das Script denn ausführt
|
cocons
(Themenstarter)
Anmeldungsdatum: 4. August 2008
Beiträge: 34
|
plheisenstein schrieb: Nix "Tzefix" - Jhuuu wir sind schon mal einen Schritt weiter, es wird also ausgeführt 😉 Hat das BashScript denn die Form wie in /etc/init.d/skeleton ?
Natürlich nicht, es ist ganz primitiv gemacht, einfach ein smbmount und ein paar andere Befehle, das wars ☺
Ich habe das ganze Skript jetzt mal mit echo's vollgestopft, die werden alle ausgeführt. Nur die "höherwertigen" Befehle werden einfach weggelassen. Ich werde mal dein Skript als Beispiel nehmen und meins schulmäßig anpassen!
|
plheisenstein
Anmeldungsdatum: 15. März 2009
Beiträge: 255
|
Ich hab mal, nur so zum Spielen, noch ein anderes geschrieben: Das schreibt beim Hochfahren und Runterfahren einfach in /var/log/runlevel.log ein paar Infos rein (Datum, Scriptname, ob Start/Stop - Routine des Scriptes aufgerufen wurde, verheriger Runleven + gestarteter Runlevel, Elternprozess) Die Kommentare ganz am Anfang werden üprigens auch von 'init' ausgewertet #! /bin/bash
### BEGIN INIT INFO
# Provides: skeleton
# Required-Start: $remote_fs
# Required-Stop: $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example initscript
# Description: This file should be used to construct scripts to be
# placed in /etc/init.d.
### END INIT INFO
# Author: Foo Bar <foobar@baz.org>
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Description of the service"
NAME=andi
DAEMON=/usr/sbin/$NAME
DAEMON_ARGS="--options args"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
LOG=/var/log/runlevel.log
# Exit if the package is not installed
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
#
# Function that starts the daemon/service
#
NOW=`date +"%Y_%m_%d__%H%M%S"`
RUNL=`runlevel`
PARENT=`ps -A | grep $PPID`
#echo -e "$NOW\t$0\t$ACTION\t${RUNL}\t${PARENT}" | tee -a $LOG
do_start()
{
# Return
# 0 if daemon has been started
# 1 if daemon was already running
# 2 if daemon could not be started
ACTION=START
echo -e "$NOW\t$0\t$ACTION\t${RUNL}\t${PARENT}" | tee -a $LOG
# Add code here, if necessary, that waits for the process to be ready
# to handle requests from services started subsequently which depend
# on this one. As a last resort, sleep for some time.
return 0
}
#
# Function that stops the daemon/service
#
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
ACTION=STOP
echo -e "$NOW\t$0\t$ACTION\t${RUNL}\t${PARENT}" | tee -a $LOG
return 0
}
#
# Function that sends a SIGHUP to the daemon/service
#
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
ACTION=RELOAD
echo -e "$NOW\t$0\t$ACTION\t${RUNL}\t${PARENT}" | tee -a $LOG
return 0
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
#reload|force-reload)
#
# If do_reload() is not implemented then leave this commented out
# and leave 'force-reload' as an alias for 'restart'.
#
#log_daemon_msg "Reloading $DESC" "$NAME"
#do_reload
#log_end_msg $?
#;;
restart|force-reload)
#
# If the "reload" option is implemented then remove the
# 'force-reload' alias
#
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
*)
#echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload}" >&2
echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
exit 3
;;
esac
:
|
plheisenstein
Anmeldungsdatum: 15. März 2009
Beiträge: 255
|
cocons schrieb: plheisenstein schrieb: Nix "Tzefix" - Jhuuu wir sind schon mal einen Schritt weiter, es wird also ausgeführt 😉 Hat das BashScript denn die Form wie in /etc/init.d/skeleton ?
Natürlich nicht, es ist ganz primitiv gemacht, einfach ein smbmount und ein paar andere Befehle, das wars ☺
Ich habe das ganze Skript jetzt mal mit echo's vollgestopft, die werden alle ausgeführt. Nur die "höherwertigen" Befehle werden einfach weggelassen.
Vieleicht ist die PATH-Variable noch nicht gesetzt und du mußt den ganzen Pfad mit angeben (/usr/bin/<befehl> statt nur <befehl> zB)
|
cocons
(Themenstarter)
Anmeldungsdatum: 4. August 2008
Beiträge: 34
|
Die Sachen sind alle mit komplettem Pfad eingegeben. Also kein ./ oder einfach smbmount.
Aber den Header habe ich natürlich nicht, das werde ich ausprobieren sobald jemand den Kasten wieder einschaltet, ich greife momentan nur per Remote zu. Alles wird gut 😉
|
plheisenstein
Anmeldungsdatum: 15. März 2009
Beiträge: 255
|
Auf jeden Fall setzt init einige Dinge voraus - zB dass man es mit <script> start oder <script> stop aufrufen kann. Du solltest daher wirklich das skeleton als Augangspunkt nehmen und deinen Bedürfnissen anpassen. Wieviel / was man daraus löschen kann weiß ich auch immer nicht so genau Was Du vielleicht noch machen könntest ist ein
2>>/bootscript.log 1>&2
an die Befehle anhängen um die Fehler und Meldungen die die Befehle ausspucken mit zu loggen
|