Запуск команди при запуску на crontab


24

Я хотів запустити команду на нашому Linux після її перезавантаження, я побачив, що це можна зробити за допомогою crontab. Я хотів виконати цю команду

sudo ifdown eth0 && sudo ifup -v eth0

на crontab я можу просто зробити:

@reboot sudo ifdown eth0 && sudo ifup -v eth0

чи мені потрібно зберігати це в сценарії?

Дякую тобі


7
Crontab видається неправильним інструментом для перезапуску eth0. Чому б не поставити цю команду (без судо) в /etc/rc.local?
mikew незалежно від

Для чого вам це потрібно? Ці завдання, як правило, виконуються автоматично під час завантаження, і майже НІКОЛИ не потрібно запускати окремо від автоматизованих процесів завантаження ...
Thomas Ward

1
@mikeww Я не можу піднести голосування на даний момент, але просто хочу подякувати вам за те, що ви запропонували це.
Лотті

Відповіді:


34

Кілька зауважень тут, перш ніж це спрацює:

  1. Не використовуйте sudoв роботі cron. Замість цього відредагуйте rootcrontab замість власного, наприклад, sudo crontab -eа потім введіть команди без sudo.
  2. Як @mikew все, що було зазначено, це незвичне використання cron, і, швидше за все, краще розмістити його /etc/rc.localперед exit 0рядком.
  3. Якщо ви скажете нам, що саме ви шукаєте, ми можемо переспрямовувати вас на параметр журналу чи конфігурації (перезапуск ваших мережевих служб при запуску відчуває себе трохи хакіш).
  4. У більшості систем @rebootтакож слід працювати після жорсткого вимикання або аварії, але існують різні реалізації cron, так що YMMV. Я бачив коментарі в різних місцях, які стверджують і те, і інше.

EDIT (2016/02/17): видалено неправильне розмиття на абсолютних контурах; kudos @muru
EDIT (2016/10/17): Додано записку про завершення
EDIT (2017/09/11): Переглянута записка про завершення роботи. Не дуже впевнений у цьому.


ОК, просто хочу уточнити, я повинен просто написати повну команду на etc/rc.localбез судо. тож тоді буде просто ifdown eth0 && sudo ifup -v eth0 вихід 0
Лотті

cronвикористовує PATHнаведене в /etc/environment, яке має /sbin.
муру

Я зробив те, що @mikew все що запропонував, і це спрацювало. дякую
Лотті

1
@TheSchwa повинен бути. Принаймні з 12.04 /etc/pam.d/cronзавантажуються pam_env, тому /etc/environmentслід читати і використовувати PATHвстановлені за замовчуванням . Ця відповідь була розміщена трохи раніше, ніж вийшла 12.04.
муру

2
@TheSchwa Заява про те, що перезавантаження крона не працює на холодному завантаженні, є помилковим. Рядки з перезавантаженням запускаються, коли починається демон демонтажу, період. Це чи тепла черевик, холодний черевик, чи не було завантаження, і я просто вручну відключив crond і запустив його знову. Демон-кранд не знає і не хвилює, чому його перезапускають, він буде просто запускати лінії перезавантаження, коли це робиться.
Курт Фітцнер

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