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


24

Я хотел запустить команду на нашем linux после перезагрузки, я увидел, что это можно сделать с помощью crontab. Я хотел запустить эту команду

sudo ifdown eth0 && sudo ifup -v eth0

на crontab я могу просто сделать:

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

или мне нужно сохранить это в сценарии?

Спасибо


7
Crontab кажется неправильным инструментом для перезапуска eth0. Почему бы не поместить эту команду (без sudo) в /etc/rc.local?
Во всяком случае,

Для чего вам нужно это сделать? Эти задачи обычно выполняются автоматически во время процесса загрузки, и почти НИКОГДА не нужно запускать отдельно от процессов автоматической загрузки ...
Томас Уорд

1
@mikewh независимо от того, что я не могу поддержать сейчас, но просто хочу поблагодарить вас за предложение.
Лотти

Ответы:


34

Несколько заметок здесь, прежде чем это будет работать:

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

РЕДАКТИРОВАТЬ (2016/02/17): Убрано неправильное пятно на абсолютных путях; kudos @muru
EDIT (2016/10/17): добавлено примечание о выключении
EDIT (2017/09/11): исправлено примечание о выключении. Не совсем уверен в этом.


Хорошо, просто хочу уточнить, я должен просто написать полную команду etc/rc.localбез sudo. так что тогда будет просто ifdown eth0 && sudo ifup -v eth0 выход 0
Лотти

cronиспользует PATHданные /etc/environment, которые есть /sbin.
Муру

Я сделал то, что предложил @mikewhh, и это сработало. спасибо
Лотти

1
@TheSchwa Должно быть. По крайней мере, начиная с 12.04, /etc/pam.d/cronзагружается pam_env, поэтому /etc/environmentдолжно быть прочитано и установлено значение по умолчанию PATH. Этот ответ был опубликован незадолго до выхода 12.04.
Муру

2
@TheSchwa Утверждение, что перезагрузка cron не запускается при холодной загрузке, неверно. Строки с перезагрузкой запускаются при запуске демона crond, точка. Это будь то горячая загрузка, холодная загрузка или не было загрузки, и я просто вручную выключил crond и снова запустил его. Демон crond не знает и не заботится, почему его перезапускают, он просто запускает строки перезагрузки всякий раз, когда это происходит.
Курт

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.