如何在重新启动时在屏幕中运行脚本

如何在重新启动时在屏幕中运行脚本

我想在重新启动时在屏幕中启动阻塞服务器,以便稍后可以访问它。

无论从哪里调用该命令,该命令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)

相关内容