Czy istnieje sposób dodawania linii do crona użytkownika za pomocą skryptu?
Zwykle robię to za pomocą crontab -e
, ale chciałbym zautomatyzować to zadanie za pomocą skryptu powłoki.
Czy istnieje sposób dodawania linii do crona użytkownika za pomocą skryptu?
Zwykle robię to za pomocą crontab -e
, ale chciałbym zautomatyzować to zadanie za pomocą skryptu powłoki.
Odpowiedzi:
Możesz powtórzyć linię w dolnej części bieżącego pliku crontab w następujący sposób:
#!/bin/bash
line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -
cron
zmianie.
crontab
Jeśli chcesz edytować wartość w swoim crontab, możesz zrobić coś w stylu:
$ crontab -l | sed -e 's/foo/bar/' | crontab -
Oczywiście musisz uważać na swoją zamianę, aby upewnić się, że pasuje ona tylko do linii, które chcesz zmienić; w przeciwnym razie wszystkie foos
zostaną zmienione na bars
(w tym przykładzie).
Zaletą tej metody jest to, że nie zastępujesz całego pliku crontab. (Metaforyczna pinceta zamiast młota.)
Możesz użyć dowolnego polecenia edycji zamiast sed . Na przykład, jeśli chcesz użyć ed do poprawienia linii, która zaczyna się tak:
2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1
Powiedzmy, że ten wiersz jest jednym z wielu wierszy lub masz wiele różnych crontabów do aktualizacji w różnych systemach i wiesz tylko, że twoja linia będzie jedyną linią z zawartym flitch
w niej terminem .
Może wyglądać następująco:
$ 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
...
Teraz muszę przyznać, że prawie 100% czasu sed zrobi to, co zrobi ed , ale zawsze dobrze jest mieć dodatkowe narzędzie na szwajcarskim nożu wojskowym. ^. ^