Verhält sich das alleinige Ausführen von cron genauso wie das Ausführen über das Skript init.d?

Verhält sich das alleinige Ausführen von cron genauso wie das Ausführen über das Skript init.d?

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/cronoder service cron start.

Nachdem ich cron auf diese Weise gestartet habe, service cron statusscheint service cron stopes problemlos zu funktionieren und die in angegebene PID-Datei /etc/init.d/cronist vorhanden.

Ich habe eine Protokollzeile eingefügt /etc/init.d/cronund es sieht so aus, als cronwü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 cronBinä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, serviceverwendet den Standard /lib/lsb/init-functions, der sich wie folgt zusammenfasst:

  1. Die startAktion ruft lediglich /usr/sbin/cron(über den /sbin/start-stop-daemonHelfer) auf,
  2. Die stopAktion sendet einfach SIGTERMan die PID in der PID-Datei (über /sbin/start-stop-daemon),
  3. Die statusKlage beläuft sich auf kill -0 $(cat /var/run/crond.pid).

Wenn Sie jedochsystemdinstalliert, die Standard-Init-Funktionen werden neu geschrieben /lib/lsb/init-functions.d/40-systemdund 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 CGroupPro-Service haben. Was ist schlimmer startund restartwird nicht funktionieren, dacronwird auf der bereits vorhandenen PID-Datei fehlschlagen und stopwird nicht beendencronInstanz, die Sie erstellt haben.

verwandte Informationen