crontab wird als bestimmter Benutzer ausgeführt

18

Ich muss täglich ein Skript ausführen. Das Skript sollte als bestimmter Benutzer (z. B. Benutzer1) und nicht als Root ausgeführt werden. Also habe ich die Cron-Datei unter /etc/cron.d abgelegt und den Benutzernamen in die Zeile (2. Spalte) eingetragen. Es wird jedoch ein Fehler ausgegeben, der besagt, dass der Befehl nicht gefunden wurde. Ich vermute, dass das Skript nicht als Umgebung von Benutzer1 ausgeführt wurde. Habe ich etwas verpasst?

Sam Kong
quelle
3
Können Sie uns den von Ihnen verwendeten Crontab-Eintrag zeigen?
User9517 unterstützt GoFundMonica

Antworten:

31

Nur /etc/crontabund die Dateien in /etc/cron.d/haben ein Benutzername-Feld. In dieser Datei können Sie dies tun:

1 1 * * * username /path/to/your/script.sh

Von der Wurzel-Crontab können sudo crontab -eSie verwenden:

1 1 * * * su username -c "/path/to/your/script.sh"

Oder Sie können die aktuelle Crontab des Benutzers wie folgt verwenden:

sudo crontab -u username -e

Die zweite Spalte in einer crontab-Datei gibt die Stunde an, zu der der Job ausgeführt werden soll. Meinten Sie das sechste Feld?

Ladadadada
quelle
Datei in /etc/cron.d mit einem Benutzerargument: help.ubuntu.com/community/CronHowto#Advanced_Crontab und warum machst du "sudo su", wenn du als root ausführst ? In jedem Fall möchten Sie, dass "su -l" die Anmeldeumgebung für den Benutzer verwendet, da dies höchstwahrscheinlich ein PATH-Problem ist, das aus der Beschreibung des Problems hervorgeht.
cjc
Sind die Dateien in /etc/cron.d keine Erweiterung von / etc / crontab? Auf den Systemen muss ich allen Dateien in /etc/cron.d einen Benutzernamen geben.
User9517 unterstützt GoFundMonica
Ach ja. /etc/cron.d/Dateien sind Teil von /etc/crontab. sudoist auch sinnlos. Ich werde diesen Teil entfernen.
Ladadadada
2
In Bezug auf das Einfügen von sudo in die crontab: (a) sudo su... ist im Allgemeinen nicht erforderlich; sudo -u <user> <command>ist in der Regel ausreichend. (b) sudo drosselt auf einigen Systemen, wenn kein TTY angeschlossen ist (z. B. wenn es von cron ausgeführt wird). Das kann in Ihrer sudoers-Datei behoben werden.
TylerL
4

Möglicherweise müssen Sie den Pfad für diesen Benutzer festlegen, wenn sich die von Ihnen verwendete ausführbare Datei beispielsweise in / usr / local / bin befindet. Um den PATH zu setzen, stellen Sie den Cronjobs etwas vor:

PATH=/bin:/usr/bin:/usr/local/bin

*/5 * * * * user1 sample_executable

Die andere Möglichkeit besteht darin, den Pfad zu sample_executable in Ihrem Cronjob vollständig anzugeben.

*/5 * * * * user1 /path/to/sample_executable

Wenn sample_executable auf die ausführbaren Dateien verweist, die nicht im Standardpfad enthalten sind, sollten Sie die erste Option verwenden.

cjc
quelle
1

Das typische Verzeichnis für Benutzer crontabs befindet sich in / var / spool / cron / crontabs. Das Dateiformat enthält keinen Benutzernamen. Benutzer-Crontabs gehören dem Benutzer und werden im Modus 0600 nach dem Benutzer benannt. Dies geschieht am besten, indem Sie Ihre Tab-Datei schreiben und die crontab -u username filenamegewünschten Cron-Einträge für diesen Benutzer einrichten .

Jeff Ferland
quelle