Hallo Gemeinde,
ich habe ein Python Skript erstellt und möchte dieses beim hochfahren des Systems ausführen. Habe dies auch mit dem im Netz kursierenden Skript hinbekommen:
#!/bin/sh
### BEGIN INIT INFO
# Provides: myservice
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Put a short description of the service here
# Description: Put a long description of the service here
### END INIT INFO
# Change the next 3 lines to suit where you install your script and what you want to call it
DIR=/root/Python/AF4SM
DAEMON=$DIR/main.py
DAEMON_NAME=AF4SM
# Add any command line options for your daemon here
DAEMON_OPTS=""
# This next line determines what user the script runs as.
# Root generally not recommended but necessary if you are using the Raspberry Pi GPIO from Python.
DAEMON_USER=root
# The process ID of the script when it runs is stored here:
PIDFILE=/var/run/$DAEMON_NAME.pid
. /lib/lsb/init-functions
do_start () {
log_daemon_msg "Starting system $DAEMON_NAME daemon"
start-stop-daemon --start --background --pidfile $PIDFILE --make-pidfile --user $DAEMON_USER --chuid $DAEMON_USER --startas $DAEMON -- $DAEMON_OPTS
log_end_msg $?
}
do_stop () {
log_daemon_msg "Stopping system $DAEMON_NAME daemon"
start-stop-daemon --stop --pidfile $PIDFILE --retry 10
log_end_msg $?
}
case "$1" in
start|stop)
do_${1}
;;
restart|reload|force-reload)
do_stop
do_start
;;
status)
status_of_proc "$DAEMON_NAME" "$DAEMON" && exit 0 || exit $?
;;
*)
echo "Usage: /etc/init.d/$DAEMON_NAME {start|stop|restart|status}"
exit 1
;;
esac
exit 0
Alles anzeigen
In dem Skript erzeuge ich Ordner und ein paar SQLite-DBs, falls diese nicht existieren. Jetzt ist mir aufgefallen, dass diese Ordner in dem init.d Verzeichnis erzeugt wurden (und deswegen das Skript nicht funktioniert). Ich habe in meinem Skript die Angaben zum Speicherort den Ordner relativ gehalten, d.h.:
DATABASE_DIR = "folder"
ADMIN = "folder/administration"
Jetzt besteht bei mir die Frage: Wo wird das Skript eigentlich ausgeführt? Muss ich, wenn ich den Autostart über init.d ausführe, in meinem Skript immer den absoluten Pfad angeben? Oder muss ich mit der Funktion
[font="Consolas, Menlo, Monaco,"]dir_path = os.path.dirname(os.path.realpath(__file__))
[/font]den Arbeitspfad ermitteln und vor jede Pfadangabe schreiben? Oder habe ich irgendetwas anderes nicht beachtet?
Mit besten Grüßen
homerunjack