
Ich arbeite mit einem Code, der cron auf einem Server startet (der es beim Booten nicht laufen lässt). Das Skript, das cron startet, richtet einige Protokollierungsfunktionen ein und ruft dann einfach auf cron
. Es verwendet weder /etc/init.d/cron
oder service cron start
.
Nachdem ich cron auf diese Weise gestartet habe, service cron status
scheint service cron stop
es problemlos zu funktionieren und die in angegebene PID-Datei /etc/init.d/cron
ist vorhanden.
Ich habe eine Protokollzeile eingefügt /etc/init.d/cron
und es sieht so aus, als cron
würde das Skript bei der eigenständigen Ausführung nicht aufgerufen.
# service cron status
script is running
* cron is running
# service cron stop
script is running
* Stopping periodic command scheduler cron [ OK ]
# cron
#
Was ist hier los? Liegt das einfach daran, dass die cron
Binärdatei und das Skript /etc/init.d/cron dieselbe Konvention für den Speicherort der PID-Datei verwenden?
Antwort1
Ihre Hypothese ist richtig:Vixie Cronhat einen festen PID-Dateispeicherort ( /var/run/crond.pid
), der auch ein zweimaliges Ausführen verhindert.
Derinit.dDas Skript, das auch von aufgerufen wird, service
verwendet den Standard /lib/lsb/init-functions
, der sich wie folgt zusammenfasst:
- Die
start
Aktion ruft lediglich/usr/sbin/cron
(über den/sbin/start-stop-daemon
Helfer) auf, - Die
stop
Aktion sendet einfachSIGTERM
an die PID in der PID-Datei (über/sbin/start-stop-daemon
), - Die
status
Klage beläuft sich aufkill -0 $(cat /var/run/crond.pid)
.
Wenn Sie jedochsystemdinstalliert, die Standard-Init-Funktionen werden neu geschrieben /lib/lsb/init-functions.d/40-systemd
und ausgeführtcrondirekt wird nicht mehr erkannt:
piotr@bialykiel:~$ sudo /usr/sbin/cron
piotr@bialykiel:~$ sudo /etc/init.d/cron status
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: inactive (dead) since Sun 2020-02-02 09:12:43 CET; 5min ago
Docs: man:cron(8)
Process: 734 ExecStart=/usr/sbin/cron -f $EXTRA_OPTS (code=killed, signal=TERM)
Main PID: 734 (code=killed, signal=TERM)
seitsystemdIch möchte einen CGroup
Pro-Service haben. Was ist schlimmer start
und restart
wird nicht funktionieren, dacronwird auf der bereits vorhandenen PID-Datei fehlschlagen und stop
wird nicht beendencronInstanz, die Sie erstellt haben.