我想在重新启动时在屏幕中启动阻塞服务器,以便稍后可以访问它。
无论从哪里调用该命令,该命令screen -d -m /home/dataserv/www/start_production_server.sh
本身都可以正常工作,但如果用作 crontab 条目,则不会。
dataserv@dataserv-dev:~$ crontab -l
# m h dom mon dow command
@reboot echo "test" > /home/dataserv/reboot.txt 2>&1
@reboot screen -d -m /home/dataserv/www/start_production_server.sh
测试条目工作正常,所以我很困惑为什么它失败了。
答案1
运行screen
命令cron
并捕获其标准错误报告此消息:
Must run suid root for multiuser support.
快速搜索结果发现,当screen
没有tty
可以从中构建其会话名称的设备时,会打印此消息。 (通常会话名称类似于11597.pts-0.myhostname
。)进一步阅读手册页显示该-S
标志可用于指定会话名称:
screen -md -S "atboot.$(hostname)" ...
“atboot”标签没有什么特别之处;我用它来提醒我该进程是在引导时启动的并且没有 tty。
将此与您的crontab
规范结合起来会导致:
# m h dom mon dow command
@reboot echo "test" > /home/dataserv/reboot.txt 2>&1
@reboot screen -d -m -S "atboot.$(hostname)" /home/dataserv/www/start_production_server.sh
运行screen -ls
将给出与此类似的输出:
11732.atboot.myhostname (03/01/16 00:25:01) (Detached)