如何通过crontab运行GNU Screen会话实现Discord机器人每日重启?
解决Crontab启动Screen会话运行Discord机器人的问题
当然可以通过crontab运行Screen会话,你的问题主要出在cron的环境限制和脚本细节处理上,以下是具体的修复方案:
1. 修复脚本中的路径与命令问题
cron的默认工作目录不是用户的home目录,且PATH环境变量非常有限,必须使用绝对路径:
修改后的脚本示例:
#!/bin/bash # 记录日志方便排查(可选但推荐) exec >> /home/admin/discordBot/cron_restart.log 2>&1 # 关闭指定的screen会话(比pkill更安全,不会误杀其他进程) /usr/bin/screen -S discordBot -X quit 2>/dev/null sleep 1 # 启动新的screen会话,直接在启动时执行node命令(无需后续stuff操作) /usr/bin/screen -dmS discordBot /usr/local/bin/node /home/admin/discordBot/NEWNEWNEWN.js
关键改进点:
- 用
screen -S discordBot -X quit替代sudo pkill screen,精准关闭目标会话,避免权限问题和误杀其他screen进程 - 启动screen时直接指定要执行的node命令(
screen -dmS 会话名 命令),省去后续用stuff输入命令的步骤,避免交互问题 - 所有命令使用绝对路径:先通过
which screen和which node确认你的实际路径,替换示例中的路径
2. 确保脚本权限正确
给脚本添加执行权限:
chmod +x /home/admin/discordBot/script.sh
3. 检查Crontab配置
确保你是用admin用户编辑的crontab(而非root):
crontab -e
保留原定时配置即可:
0 0 * * * /bin/bash /home/admin/discordBot/script.sh
4. 调试排查
如果还是失败,查看cron的执行日志:
- 树莓派上可以查看系统日志:
journalctl -u cron.service - 或者查看我们在脚本中添加的自定义日志:
cat /home/admin/discordBot/cron_restart.log
日志会告诉你具体是命令找不到、权限不足还是脚本执行中的其他错误。
内容的提问来源于stack exchange,提问作者Zwoooz
相关产品推荐
相关产品推荐

