warum kann ich ein Programm nicht direkt von cron aus starten?

warum kann ich ein Programm nicht direkt von cron aus starten?

Ich richte derzeit einen Raspberry Pi mit Debian Wheezy als IRC-Server ein. Beim Booten werden als normaler Benutzer zwei Programme ausgeführt - ngircd und atheme.

ngircd und atheme loggen sich beide ein in/var/log/syslog

ngircd wird von der ausführbaren Datei ( /usr/local/sbin/ngircd ) selbst gestartet, ebenso wie Atheme ( /home/user/atheme/bin/atheme-services). Das manuelle Starten der Programme als Benutzer von einem Terminal aus funktioniert problemlos.

Wenn ich versuche, ngircd (über den Installationsort) von cron aus zu starten, startet es einfach nicht – /var/log/sysloges wird angezeigt, dass der Cron-Job ausgeführt wurde, aber es passiert nichts, es gibt keine Fehlermeldungen oder überhaupt ngirc-bezogene Protokolle. Atheme startet problemlos.

Wenn ich jedoch ein Skript erstelle, das nichts anderes tut, als ngird auszuführen (unter Verwendung desselben Pfads, den ich zuvor verwendet habe) und das zu cron hinzufüge, funktioniert es einwandfrei (ebenso wie die direkte Ausführung). Warum startet ngircd nicht von cron aus?

Das ist kein großes Problem, aber es macht das System etwas chaotischer, als ich es gerne hätte. Es ist auch seltsam, dass sich die beiden Programme unterschiedlich verhalten

Antwort1

Ich habe nicht die Berechtigung, Kommentare abzugeben, also kann ich nicht um Klärung bitten, aber ich würde vorschlagen, den Daemon entweder von einem Initscript oder von rc.local aus auszuführen und nicht von cron. Cron wird normalerweise verwendet, um Dinge auszuführenzu einer bestimmten Zeit, regelmäßig. Die Handhabung von Daemons und Diensten ist normalerweise eine Aufgabe für IhrenInit-System.

So führen Sie etwas beim Booten als normaler Benutzer aus:

Fügen Sie dies hinzu zu/etc/rc.local:

/bin/su -c '/path/to/your/executable args &' -s /bin/bash username >/dev/null 2>&1

Antwort2

Cron führt etwas aus, das sich genau wie

sudo - user /path/to/command

oder

su user
/path/to/command

Wenn Sie überprüfen möchten, ob Ihr Befehl ausgeführt wird, müssen Sie ihn auf diese Weise testen.

Sie können die Benutzer-Crontab entweder mit

crontab -e

oder die systemweite Crontab alsWurzelmit

nano /etc/crontab

oder Ihr bevorzugter Editor außerNanometer(wenn nötig, mit voranstellen sudo). Beachten Sie, dass sich diese beiden Crontabs in der Syntax unterscheiden, da die systemweite Crontab eine zusätzliche Spalte zwischen Ausführungszeit und Befehl hat, die den Benutzer angibt, als der der Befehl ausgeführt werden soll. Sie möchten Ihre Ausführungszeit auf Folgendes einstellen @reboot:

@reboot user /usr/local/sbin/ngircd
@reboot user /home/user/atheme/bin/atheme-services

Lassen Sie das Wort einfach weg, userwenn Sie die Benutzer-Crontab mit bearbeiten crontab -e.

Alternativ können Sie, je nach Ihrem System, die Initskripte von System V oder die Dienststeuerungsdateien von systemd verwenden.

verwandte Informationen