
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/syslog
es 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, user
wenn 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.