@reboot后+1分钟开始Crontab作业


42

需要在+1分钟内每次重新启动时执行脚本。我记录了下来,@reboot但对我的剧本来说还为时过早。重新启动后如何执行?


2
为什么为时过早?也许一个init脚本会更合适(通过考虑依赖关系,例如,该脚本需要首先设置网络)?
sr_

我的脚本需要在所有其他脚本之后执行,最后一句话
Yurij73

由于您的工作需要在所有内容之后执行,并且所有内容的概念都是可变的(添加新的autostart @ reboot应用程序并不罕见),因此我认为将作业放入rc脚本中取决于您自己实现您的目标的方式。通常,您需要将任务放在/etc/rc.local中指定的任务的底部,但是根据系统的启动配置,可能并非总是如此。因此,对其进行测试,看看它是否对您有用。
MelBurslan

听起来像Upstart的案例吗?
2013年

Answers:


64

该脚本是否只打算在启动后一分钟运行,还是可以在其他时间使用?在前一种情况下,可以将其添加sleep 60到脚本的开头,在后一种情况下,可以将其添加到crontab文件中:

@reboot sleep 60 && my_script.sh

但是,正如sr_所指出的那样,也许您以错误的方式处理此问题,并且正确的init.d或rc.d脚本将是更可靠的解决方案。


1
或使用命令行选项来调整延迟(例如script -s X,这将转换为sleep X脚本内部)。
peterph

我可以将其应用于/etc/init.d/中的文件taskrunner吗?
安德烈斯·安吉尔

@AndresAngel-对不起,我不知道。我使用的FreeBSD没有taskrunner,也不是,/etc/init.d
D_Bye

在我的rhel7上,睡眠根本不起作用,它会永远睡眠并且永远不会回来。
Inder R Singh

16

例如,如果您需要在重新启动后在网络可用时执行某些操作,则可以编写将在所需时间执行的systemd单元(当然,这仅适用于具有systemd的系统)。

为此,请创建/etc/systemd/system/my_script.service具有以下内容的文件:

[Unit]
Description=My script that requires network
After=network.target

[Service]
Type=oneshot
ExecStart=/full/path/to/my_script.sh

[Install]
WantedBy=multi-user.target

然后执行:

sudo systemctl daemon-reload
sudo systemctl enable my_script

你完成了!


11

我会用at。如:

@reboot echo /root/bin/do_the_stuff | at now + 2 minutes
# at assigns it an execution time truncated to whole minutes,
# so this means it will execute in 1--2 minutes.

...附带提到的警告,如果您真正想要的是在所有其他事情之后运行它,则应检查如何在操作系统使用的初始化中执行该操作。

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.