运行 每 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
我想每 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