每30分钟一次运行脚本bash

时间:2015-10-10 10:42:16

标签: linux bash cron

我想用cron每30分钟运行一次脚本,但我的代码有问题。 在每30分钟我必须杀死旧脚本并再次运行它。我有这样的想法,但它不起作用:

    cd /var/www/scripts
    pkill -f bot
    now="$(date +%Y%m%d%H%M%S)"
    screen -S bot 
    node mybot.js >> logi/logi_$now.txt

3 个答案:

答案 0 :(得分:1)

使用crontab

 crontab -l

*/30 * * * * /path/to/your/command

保存并运行

答案 1 :(得分:1)

您不能使用screen在脚本中运行后台内容。使用&符号(&)来处理进程和nohup,以便在cron脚本退出时不会被杀死。还要记住文件中的子进程PID。

这样的事情:

kill -- "$(cat mybot.pid)"
now="$(date +%Y%m%d%H%M%S)"
nohup node mybot.js >> "logi/logi_$now.txt" &
echo $! > mybot.pid

答案 2 :(得分:0)

该行

    node mybot.js >> logi/logi_$now.txt
永远不会达到

,因为screen -S <session name>将启动一个屏幕会话,因此新的并连接到它。脚本的其余部分只会执行一次内部&#39;内部&#39;会话终止。

screen更适合互动使用。在像这样的脚本中调用它是相当奇怪的。我想您希望node mybot.js >> logi/logi_$now.txt在后​​台运行,以便您的脚本可以在node继续运行时终止。有关如何执行此操作的选项,请参阅Redirecting stdout & stderr from background processNode.js as a background service