在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中呢?
mikewhatever

您需要做什么?这些任务通常在启动过程中自动完成,而且几乎从来没有需要从自动启动过程中,单独运行...
托马斯·沃德

1
@mike无论何时我都无法投票,但只想感谢您的建议。
洛蒂

Answers:


34

在此之前一些注意事项将起作用:

  1. 不要sudo在Cron工作中使用。而是编辑root而不是您自己的crontab,例如sudo crontab -e,然后输入不带的命令sudo
  2. 正如@mikewhatever所提到的,这对于来说是一种奇怪的用法cron,并且最好放在/etc/rc.localexit 0行之前。
  3. 如果您确切地告诉我们您要寻找的内容,我们也许可以将您引导至日志或配置选项(在启动时重新启动网络服务会有些许麻烦)。
  4. 在大多数系统上@reboot,也应在硬关闭或崩溃后运行,但YMMV却有不同的cron实现。我在不同地方都看到过断言两者的评论。

编辑(2016/02/17):删除了绝对路径上的错误blur; 荣誉@muru
编辑(2016/10/17):添加了关闭注释
编辑(2017/09/11):修订了关闭注释。不太确定这一点。


好的,只是想澄清一下,我应该只写完整的命令etc/rc.local而不使用sudo。因此,这将只是ifdown eth0 && sudo ifup -v eth0退出0
Lottie

cron使用确实具有的PATH给定。/etc/environment/sbin
muru

我按照@mikewhatever的建议进行了工作,并且有效。谢谢
Lottie

1
@TheSchwa应该是。至少从12.04开始,应读取/etc/pam.d/cronload pam_env/etc/environment并使用默认PATH设置。该答案在12.04发布之前发布。
muru

2
@TheSchwa有关cron重新启动不在冷启动上运行的说法是错误的。crond守护程序启动时,运行带有重新引导的行,期间。那是热启动,冷启动,还是没有启动,我只是手动关闭crond,然后重新启动。crond守护程序不知道或不在乎为什么要重新启动,它只会在需要时仅运行重新启动行。
Kurt Fitzner

6

您可以为此使用crontab,但是如果使用sudo,则需要输入NOPASSWD规则sudoers。(请参阅如何使用sudo命令运行cron作业。)

/etc/rc.local在该exit 0行之前编辑和添加这些命令会更简单。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.