Ich habe ein FreeBSD-Gefängnis, in dem ich einen Server mit dem folgenden Befehl ausführe:
/usr/sbin/daemon /path/to/script.py
Im Moment muss ich diesen Befehl jedes Mal ausführen, wenn ich den Computer neu starte und das Gefängnis startet. Ich möchte, dass dieser Befehl von gestartet wird /etc/rc
. Gibt es eine einfache Möglichkeit, ein FreeBSD-RC-Skript für einen daemon
Befehl zu erstellen ?
UPDATE: Ich habe diese BSD-Dokumentation über RC-Skripte gelesen und daraus das folgende Skript erstellt /etc/rc.d/pytivo
:
#!/bin/sh
. /etc/rc.subr
name=pytivo
rcvar=pytivo_enable
procname="/usr/local/pytivo/pyTivo.py"
command="/usr/sbin/daemon -u jnet $procname"
load_rc_config $name
run_rc_command "$1"
Dies funktioniert, um das Python-Skript zu starten, das ich als Daemon möchte, wenn das Gefängnis startet ... (angegeben pytivo_enable="YES"
ist in /etc/rc.conf
), aber das RC-Skript weiß nicht, ob der Daemon ausgeführt wird (es glaubt, dass es nicht ist, wenn es ist) und Es gibt eine Warnung, wenn ich versuche, es zu starten:
[root@meryl /home/jnet]# /etc/rc.d/pytivo start
[: /usr/sbin/daemon: unexpected operator
Starting pytivo.
[root@meryl /home/jnet]#
Es ist also nah dran und es funktioniert , aber ich denke, ich sollte in der Lage sein, bessere Funktionen als diese zu erhalten.
XX_enable="YES"
in /etc/rc.conf einfügen, damit es automatisch gestartet wird. Beginnen Sie mit der Suche nach vorhandenen SkriptenAntworten:
command
sollte nicht mehrere Wörter enthalten. Dies ist die Ursache für den[
angezeigten Fehler. Sie sollten alle Flags separat setzen.Außerdem sollten Sie verwenden
pytivo_user
, um die laufende UID festzulegen, und nichtdaemon -u
. Alle diese magischen Variablen finden Sie in der Manpage rc.subr (8) .Außerdem sollten Sie das rc-Subsystem darüber informieren, dass pytivo ein Python-Skript ist, damit es den Prozess finden kann, wenn es prüft, ob er ausgeführt wird.
Schließlich sollten Sie die Redewendung
set_rcvar
für verwendenrcvar
.So etwas (ich bin mir nicht sicher, ob dies der richtige Python-Pfad ist):
quelle
usr/local/pytivo/pyTivo.py
es nicht dämonisiert , daher/usr/bin/daemon
werde ich ohne Aufruf den Befehl nur im Vordergrund ausführen, wenn ich ihn ausführe/etc/rc.d/pytivo start
status
undstop
!start_cmd
vor dem Anrufload_rc_config
start_cmd="/usr/sbin/daemon -u $pytivo_user $command"
Wenn Sie kein RC-Skript benötigen, können Sie nur /etc/rc.local verwenden.
Für Ihr RC-Skript fehlen abhängige Kommentare, mindestens eine Zeile
sollte helfen, dass es zum richtigen Zeitpunkt ausgeführt wird.
Möglicherweise müssen Sie auch eine PID-Datei definieren
quelle
: /usr/sbin/daemon: unexpected operator
und mein RC-Skript weiß immer noch nicht, ob das Skript tatsächlich ausgeführt wird.