
Ich verwende Debian Stretch mit Systemd-Version 231-9.
Ich muss einige Shell-Skripte und Nicht-Daemon-Programme im Hintergrund ausführen, auch wenn ich mich abmelde.
Früher habe ich einfache init.d-Skripte mit LSB-Header erstellt und dann mit der Startoption case, die einfach „my_script.sh >> /var/log/my_script.log 2>&1 &“ ausführt, um my_script.sh im Hintergrund auszuführen, aber jetzt beendet Systemd sie, sobald ich das Terminal schließe, egal, was ich versuche: &, nohup, setsid, disown.
Können Sie mir helfen, ein Rezept für ein richtiges init.d-Skript zu erstellen, mit dem jedes Skript oder Nicht-Daemon-Programm als Daemon ausgeführt wird?
Danke schön.
Antwort1
Wenn Ihre Dinge dem Root-Benutzer gehören, dann /etc/rc.local
:
screen -dmS ThingOne /path/to/thing-one
screen -dmS ThingTwo /path/to/thing-two
Oder alternativ für jeden Benutzer (einschließlich Root) in der Cron-Tabelle:
@reboot screen -dmS ThingOne /path/to/thing-one
# et cetera
Antwort2
So können Sie ein Skript als Daemon festlegen:
#! /bin/sh
### BEGIN INIT INFO
# Provides: foobar
# Required-Start: $local_fs $network
# Required-Stop: $local_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: foobar
# Description: more foo for your bars
### END INIT INFO
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting foobar "
# example 1 - system service
# /usr/bin/foobar --config /etc/foo.conf start
# example 2 - run script as user
# su --login mkaz --command "/home/mkaz/bin/my-script --cmd-args"
;;
stop)
echo "Stopping foobar"
# example 1
# /usr/bin/foobar --config /etc/foo.conf stop
;;
*)
echo "Usage: /etc/init.d/foobar {start|stop}"
exit 1
;;
esac
exit 0
Verschieben Sie dann Ihr Skript in den Ordner init.d und legen Sie es als ausführbare Datei fest
sudo mv foobar /etc/init.d/ # move to init.d
sudo chmod 755 /etc/init.d/foobar # make executable
Wenn Sie Ihr Skript beim Start ausführen möchten:
update-rc.d foobar defaults
Wenn Sie Ihr Skript aus dem Start entfernen möchten:
update-rc.d -f foobar remove
Wenn Sie Ihr Skript manuell starten möchten:
service foobar start
Quelle :https://debian-administration.org/article/28/Making_scripts_run_at_boot_time_with_Debian