如何在特定时间停止脚本,直到由cron重新启动它?


12

我有一个运行OSMC(基于Debian)的Raspberry Pi。

我设置了一个cron作业,以在午夜启动脚本sync.sh。

0 0 * * * /usr/local/bin sync.sh

我需要在上午7点停止脚本。目前,我正在使用:

0 7 * * * shutdown -r now

有没有更好的办法?我觉得重启太过分了。

谢谢

Answers:


25

您可以使用timeout命令运行它,

timeout - run a command with a time limit

Synopsis
timeout [OPTION] NUMBER[SUFFIX] COMMAND [ARG]...
timeout [OPTION]
Description

Start COMMAND, and kill it if still running after NUMBER seconds. SUFFIX may be 's' for seconds (the default), 'm' for minutes, 'h' for hours or 'd' for days. 

PS。如果同步过程花费太多时间,则可以考虑使用另一种方法来同步数据,可能会阻止复制。


我的互联网连接速度很慢,因此为什么要花这么长时间进行同步。您会建议任何特定信号吗?
安东尼

@Anthony您现在如何同步?
拉宾



@Anthony,您可以尝试其他应用程序,例如syncthing(syncthing.net)或BTSync(resilio.com),它们在要同步的文件的块级上工作
Rabin

9

如果您在休眠17小时后可以轻松继续进行同步,请尝试

0 0 * * * killall -CONT -g sync.sh || /usr/local/bin/sync.sh
7 0 * * * killall -STOP -g sync.sh

如果您希望同步从头开始,请尝试

0 0 * * * exec /usr/local/bin/sync.sh
7 0 * * * killall -TERM -g sync.sh

如果您的同步或其子任务忽略了信号但没有留下碎片,请确保

0 0 * * * exec /usr/local/bin/sync.sh
7 0 * * * killall -KILL -g sync.sh

killall


我正在使用下面找到的脚本,使用镜像-c似乎不介意重新启动它。您会推荐上述哪一项?:gist.github.com/feralhosting/4e7e93a7fecd8f55cb4a
Anthony

看到LFTP脚本希望SIGTERM清除其锁定文件,并考虑到服务器在17个空闲小时甚至是更糟糕的inet [64]重编号上出现服务器超时的可能性,我会选择0 0 * * * timeout 7h /usr/local/bin/sync.sh或使用与我大致相同的killall -TERM变体。
Roman Czyborra

4

我还将使用cron在指定的时间“停止”或“杀死”该服务或脚本。
首先创建您的cron作业以运行您的作业或脚本。(你可以很容易地运行其他的cron会杀死有一个名称的作业 sudo pkill wget

其次,您希望在以下输出中看到以有用和可读格式运行的crontab任务:

   ps -o pid,sess,cmd afx | egrep "( |/)cron( -f)?$"

它们将出现在第一行中,如下所示:

1108  1108 cron
4288  1108 \_ CRON
4289  4289     \_ /bin/sh -c /path/to/my/crontab/script1.sh
4290  4289         \_ /bin/bash /path/to/my/crontab/script1.sh
4295  4289             \_ /usr/bin/wget LINK

第一列是PID,第二列是会话ID,第三列是cron启动的命令。您可以使用Session ID杀死与特定cron任务相关的所有进程,因此在上面的示例中,您应该杀死Session ID 4289:

   pkill -s 4289

您需要将pkill放在脚本中并作为cron运行


每次cron作业运行时,会话ID都会更改吗?关闭电源后再打开怎么办?
安东尼

是的,它将改变。但是,如果您编写脚本,则可以获取PID并将其放入变量中。如果名称显示出来,您也许可以使用它。pkill sync.sh
ddlingo
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.