Wie führe ich einen Cron-Job als bestimmter Benutzer aus?

66

Ich möchte einen Cron-Job als bestimmter Benutzer auf meinem Computer ausführen. Wie kann ich den Benutzer angeben, unter dem ein Cron-Job ausgeführt werden soll?

Die Cron-Jobs werden auf einem Server ausgeführt (unter Ubuntu 10.0.4). Die Benutzer sind Benutzer, die speziell für die Ausführung bestimmter serverseitiger Aufgaben erstellt wurden. Diese Benutzer haben Folgendes gemeinsam:

  • Anmeldung am System nicht möglich
  • Haben Sie eingeschränkten Zugriff auf bestimmte Ordner / Dateien
morphe
quelle

Antworten:

79

Angenommen, Sie können sich nicht einfach anmelden und zur Crontab dieses Benutzers hinzufügen, fügen Sie eine Datei hinzu /etc/cron.d. Es sollte wie ein normaler Cronjob formatiert sein, aber mit einem zusätzlichen Feld. Setzen Sie den Benutzer vor dem auszuführenden Befehl und nach dem Timing. Sie sollten in der Lage sein, bereits Beispiele auf Ihrem System zu finden.

Beispiel:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command
Daenyth
quelle
Ich denke das ist die richtige Antwort. Ich werde nach einigen Beispielen suchen und weitere untersuchen müssen.
morphe
2
Und eins von mir, das ist der beste Weg, um das zu tun, was du willst. Wenn Sie genauer in die Datei / etc / crontab schauen, werden Sie feststellen, dass nach der Zeitvorlage und vor dem Befehl dort "root" steht. Dies bedeutet, dass "root" diese Befehle ausführt. Fügen Sie einfach Ihren eigenen Zeitplan hinzu und verwenden Sie anstelle von "root" einen beliebigen Benutzer. Beachten Sie auch, dass Sie bei der Verwendung von Crontabs pro Benutzer (wie von Eric D empfohlen) die Funktionalität der systemweiten Crontab (/ etc / crontab und /etc/cron.d) verlieren können.
Patkos Csaba
3
Ich denke, die bevorzugte Lösung wäre, einfach crontab -u <user> -ealles an einem Ort zu lassen, was Sie als root tun können. Ich mag es jedoch, meine Cron-Jobs nach Funktionen zu gruppieren, anstatt nur nach Benutzern. Daher ist dies die bevorzugte Lösung für mich.
Stuart H
41

Als root, um den cron von user1 zu bearbeiten:

crontab -u user1 -e

Sie können Ihren Befehl auch starten mit:

su user1 -c foo bar

Aber oft reduzieren die Skripte selbst ihren eigenen Zugriff, wenn sie als root gestartet werden.

Eric Darchis
quelle
1

Ich habe ein paar Wochen danach gesucht und das hat endlich funktioniert ...

Erstellen Sie Ihr Skript als Benutzer1

ssh user1@ipaddress
nano hourly-event.sh

Geben Sie einen Befehl ein

#!/bin/bash
echo "YAY it works" > /home/user1/yay.txt

mach es ausführbar

chmod 755 hourly-event.sh

Bearbeiten Sie die crontab für user1

sudo crontab -u user1 -e

Füge eine Zeile am unteren Rand ein, die auf deine Skripte zeigt.

# m h  dom mon dow   command
*   *   *   *   *    bash ./hourly-event.sh

exit - Änderungen speichern (beim Speichern wird ein / tmp-Verzeichnis angezeigt ... es ist in Ordnung)

Warten Sie auf die Wende der Minute

öffne deine neu erstellte yay.txt

nano /home/user1/yay.txt

Sie sollten jetzt ein Nano-Fenster mit "YAY it works" als erste und einzige Zeile geöffnet haben, wenn am unteren Rand Ihres Nano-Fensters "New File" (Neue Datei) angezeigt wird

Sie können auch Ihren neuen crontab-Eintrag für Benutzer1 unter / var / spool / cron / crontabs / Benutzer1 überprüfen

FRIEDEN

user220364
quelle
0

Manchmal möchten Sie vielleicht, dass der Benutzer seine Umgebung lädt, besonders wenn Sie "rbenv", "nvm" wie folgt verwenden:

0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...

(Hier source ~/.bash_profilelädt der Befehl Ihre Ruby- oder Node-Umgebung.

Siwei Shen 申思维
quelle