
Ich möchte einen stündlichen Cron-Job als bestimmter Benutzer (xfeautomation) und in einer virtuellen Python-Umgebung ausführen. Muss ich den Skriptspeicherort in PATH hinzufügen, wenn ich ihn als bestimmter Benutzer ausführe? Mein aktueller Cron-Job sieht folgendermaßen aus:
0 * * * * xfeautomation /opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
Ist das der richtige oder optimale Weg? TIA
Antwort1
zu diesem Benutzer wechseln.
sudo su - xfeautomation
Laufen
crontab -e
Es erscheint ein Dateieditor mit einer leeren Datei. Fügen Sie dort Ihren Job ohne Benutzernamen hinzu und speichern Sie ihn.
0 * * * * /opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
Überprüfung:
sudo su - xfeautomation
crontab -l
ODER
sudo crontab -u xfeautomation
Antwort2
Muss ich den Skriptspeicherort zu PATH hinzufügen, wenn ich es als bestimmter Benutzer ausführe?
Normalerweise müssen Sie die Umgebungsvariable PATH nicht ändern, wenn Sie absolute Pfade verwenden, wie Sie es jetzt tun mit/opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
Als Systemadministrator haben Sie mehrere Möglichkeiten, zeitgesteuerte Batch-Jobs zu erstellen, die unter einer anderen Benutzerkennung ausgeführt werden:
Wie indiese Antwort:Richten Sie eine persönliche Crontab für diesen Benutzer ein. Jobs in einer persönlichen Crontab werden immer unter der Benutzer-ID ihres Besitzers ausgeführt.
Beachten Sie, dass, wenn Sie als Administrator eine persönliche Crontab für einen anderen Benutzer einrichten, dieser Benutzer diese Cron-Job-Spezifikation ändern und löschen kann, wodurch Ihre Arbeit rückgängig gemacht wird.Alternativ können SiePlanen Sie einen Systemjob aus der System-Crontab. Die System-Crontab (normalerweise
/etc/crontab
und/oder Drop-In-Dateien in/etc/cron.d/
) gehört root und kann von nicht privilegierten Benutzern nicht geändert werden. Die Job-Spezifikation in der System-Crontab unterstützt ein zusätzliches Feld, das in persönlichen Crontab-Dateien nicht vorhanden ist: Feld Nr. 6 benötigt einen Benutzernamen, z. B.xfeautomation
die Benutzer-ID, die zum Ausführen des Jobs verwendet wird.
Die von Ihnen angegebene Syntax ist korrekt für einen Eintrag in/etc/crontab
oder eine Drop-In-Datei wie/etc/cron.d/wf_api_linux
0 * * * * xfeautomation /opt/scripts/wf_venv/bin/python /opt/scripts/wf_api_linux.py 2>&l /opt/scripts/log.txt
Da Sie alle Ausgaben und Fehler protokollieren, besteht kein Grund zur Sorge, aber normalerweise sendet Cron Standardausgaben und Fehler per E-Mail an Root, wenn Sie eine System-Crontab einrichten, und direkt an den Benutzer, wenn Sie eine persönliche Crontab verwenden.
Soweit ich weiß, führen beide Methoden tatsächlich zu den gleichen Bedingungen für den Job und sind, abgesehen von den Bedenken hinsichtlich des Eigentums an der Stellenbeschreibung und den E-Mails, gleichwertig.