Startskript zum Ausführen eines Shellskripts als Daemon

Startskript zum Ausführen eines Shellskripts als Daemon

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

verwandte Informationen