如何仅执行一次cron作业?


14

我有一份工作,从一开始就永远存在。因此,我只想在将其输入“ crontab -e”文件并将其保存(或)后每当发生重新启动后才启动一次。

如何实现呢?

Answers:


22

如果希望命令以后再运行一次,请使用该at命令。

如果希望命令在系统引导时运行一次,则正确的解决方案是使用以下任一方法:

  • 系统RC脚本(/etc/rc.local)
  • 具有@reboot特殊前缀的crontab (请参见手册页)

对于非root用户,后者是唯一的选择。


2
+1表示@reboot。
Alex Holst,2010年

如果可能的话,我总是喜欢使用/etc/rc.local ...我怀疑@reboot实际上是在crond启动而不是系统启动时运行命令。细微但可能的差异。
MikeyB'2

假设我在crontab文件中输入了@reboot“ cmd .............”并保存了它。该命令现在开始吗?(或)是否仅在重新启动后启动?
拉玛瓦达卡图

试试看:)您可能需要做的是将其放入crontab中,然后使用at now
MikeyB

好答案。我总是忘了@reboot
Bill Weiss

9

您可以在将来的某个时间使用at(1)来运行作业。但是,如果您想在引导时运行某些东西,而它会自己继续运行,也许您想在/etc/init.d/中添加一个条目?这样一来,您就可以在启动时启动它。


1
您也可以使用rc.local。/etc/rc.local中的命令“将所有其他init脚本之后执行。如果您不想执行完整的Sys V风格的init东西,则可以将自己的初始化内容放入rc.local。”

乔:好的。
比尔·韦斯

如何停止at命令启动的进程?(我通过使用“ ps命令”查看进程ID列表后知道杀死进程ID,这对“在命令中”也起作用)。创建自定义脚本容易吗?
Rama Vadakattu'2

双方都同意。可以使用停止所有进程kill(假设您具有这样做的权限,您可以针对自己的进程进行操作)。制作一个初始化脚本真的很容易。寻找/etc/init.d/一个不会很长的脚本,然后用它来建模,或者用google搜索making init scripts (your distribution)
Bill Weiss,2010年

1
许多发行版都包含一个框架脚本(/etc/init.d/skeleton在openSuSE上),您可以适应自己的使用。
MikeyB

3

只能运行一次并一直运行直到您将其终止的工作称为“守护程序”。它们通常是通过/etc/init.d/中的init脚本启动的。

如果您的工作在某个时候结束,并且可以视为一次性工作,那么您可能需要查看at命令。例如,如果我想今晚在晚上10点运行find命令,并且只有一次,我会这样做:

$ at 10PM
at> find /root > /root/find_results.list
at> <EOT>
job 3 at 2010-02-10 22:00

1

看一下at命令


系统重新启动后会发生什么?我是否还需要输入“ at command”?
拉玛·瓦达卡图

at命令条目不会在重新启动后丢失。ibm.com/developerworks/linux/library/l-job-scheduling.html是作业调度的有趣介绍
Dominik 2010年

@Rama Vadakattu:“ at命令条目不会在重新启动后丢失。” ...尚未执行 请参阅MikeyB的答案。
暂停,直到另行通知。

好的,我将对此做更多的研究。
拉玛·瓦达卡图
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.