Додайте рядки до cron із скрипту


40

Чи є спосіб додати рядки до крона користувача через скрипт?

Я зазвичай роблю це за допомогою crontab -e, але я хотів би автоматизувати це завдання за допомогою сценарію оболонки.


Відповіді:


49

Ви можете відлунювати рядок до нижньої частини Crontab поточних користувачів так:

#!/bin/bash

line="* * * * * /path/to/command"
(crontab -u userhere -l; echo "$line" ) | crontab -u userhere -

+1 тому що ви побили мене до цього (у мене була помилка сценарію під час тестування: D). Перше, що вам потрібно додати, я думаю: систему потрібно повідомити, що cronбуло змінено.
Rinzwind

Я знав, що це буде гонка, щоб отримати відповідь! Ви маєте рацію в тому, що крону потрібно повідомити. Ось чому ви не можете просто повторити команду до кінця crontab. Я перевірив, що вищезазначений сценарій працює, і cron починає виконувати команду.
Річард Холлоуей

13
Ну, і я думаю, це також помиляється, якщо crontabдля цього користувача ще не існує (?)
Rinzwind

7
Він попереджає, що користувачів crontab не існує, якщо це так, але він потім створить його. Я підтримую ваші коментарі як проникливі.
Річард Холлоуей

3

Якщо ви хочете відредагувати значення у своєму crontab, ви можете зробити щось відповідно до:

$ crontab -l | sed -e 's/foo/bar/' | crontab -

Очевидно, що вам потрібно бути обережними зі своєю підміною, щоб бути впевненою, що вона відповідає лише рядкам, які ви хочете змінити; інакше всі foosзміниться на bars(у цьому прикладі).

Перевага цього методу полягає в тому, що ви не замінюєте весь кронтаб. (Метафоричний пінцет, а не кувалда.)

Ви можете використовувати будь-яку команду редагування замість sed . Наприклад, якщо ви хочете скористатися ed, щоб торкнутися лінії, яка починається приблизно так:

2 * * * * /sbin/flitch --days 3,4 > /var/log/flitch.out 2>&1

Скажімо, цей рядок є між багатьма рядками або у вас є багато різних кронових вкладок для оновлення в різних системах, і ви знаєте лише, що ваша лінія буде єдиним рядком із терміном flitchу ній.

Це може виглядати так:

$ 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
...

Тепер я повинен визнати, що майже 100% часу sed буде робити те, що буде робити Ед , але завжди добре мати додатковий інструмент на ножі швейцарської армії. ^. ^

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.