我想用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
答案 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 process和Node.js as a background service。