Gibt es eine Möglichkeit, dem Cron eines Benutzers über ein Skript Zeilen hinzuzufügen?
Normalerweise mache ich das mit crontab -e
, aber ich möchte diese Aufgabe mit einem Shell-Skript automatisieren.
Gibt es eine Möglichkeit, dem Cron eines Benutzers über ein Skript Zeilen hinzuzufügen?
Normalerweise mache ich das mit crontab -e
, aber ich möchte diese Aufgabe mit einem Shell-Skript automatisieren.
Antworten:
Sie können die Zeile unten in der crontab des aktuellen Benutzers wie folgt wiedergeben:
#!/bin/bash
line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
cron
es geändert wurde.
crontab
für diesen User noch nicht existiert (?)
Wenn Sie einen Wert in Ihrer crontab bearbeiten möchten, können Sie folgende Aktionen ausführen:
$ crontab -l | sed -e 's/foo/bar/' | crontab -
Natürlich müssen Sie bei Ihrer Ersetzung vorsichtig sein, um sicherzustellen, dass sie nur zu den Zeilen passt, die Sie ändern möchten. Andernfalls werden alle foos
in bars
(in diesem Beispiel) geändert .
Der Vorteil dieser Methode ist, dass Sie nicht die gesamte Crontab ersetzen. (Eine metaphorische Pinzette statt eines Vorschlaghammers.)
Sie können einen beliebigen Bearbeitungsbefehl anstelle von sed verwenden . Wenn Sie beispielsweise mit ed eine Zeile nachbessern möchten, die zunächst so aussieht:
2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1
Angenommen, diese Zeile gehört zu vielen Zeilen, oder Sie müssen viele verschiedene Crontabs auf verschiedenen Systemen aktualisieren, und Sie wissen nur, dass Ihre Zeile die einzige Zeile mit dem darin enthaltenen Begriff flitch
ist.
Es könnte so aussehen:
$ cat /tmp/edscript
/flitch
s/3/9/
w
q
$ crontab -l > /tmp/out && ed /tmp/out < /tmp/edscript && crontab - < /tmp/out
$ crontab -l
...
2 * * 1 * /sbin/flitch --days 9,4 > /var/log/flitch.out 2>&1
...
Jetzt muss ich zugeben, dass sed in fast 100% der Zeit das tut, was ed tut, aber es ist immer gut, ein zusätzliches Werkzeug für das Schweizer Taschenmesser zu haben. ^. ^