运行 每 30 分钟脚本一次 bash

run the script every 30 minutes bash

我想每 30 分钟使用 cron 运行 脚本,但我的代码有问题。 每 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

使用 crontab :

 crontab -l

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

保存并运行

    node mybot.js >> logi/logi_$now.txt

永远不会到达,因为 screen -S <session name> 将启动一个屏幕会话,因此会启动一个新的 shell 并连接到它 。脚本的其余部分只会在 'inner' 会话终止后执行。

screen 更适合交互使用。在这样的脚本中调用它是相当奇怪的。我猜你想在后台有 node mybot.js >> logi/logi_$now.txt 运行,这样你的脚本可以在 node 保持 运行 的同时终止。请参阅 Redirecting stdout & stderr from background process and Node.js as a background service 以了解如何执行此操作的选项。

您不能在脚本的后台使用 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