crontab 不创建屏幕会话

crontab 不创建屏幕会话

我正在尝试使用

@reboot /usr/bin/screen -dmS nfc /home/pi/.nvm/versions/node/v17.8.0/bin/npm run --prefix /home/pi/nfc/ dev

在启动时运行我的脚本/home/pi/nfc/。可悲的是,重新启动后,我没有看到任何启动屏幕(使用screen -ls)。如果我使用该命令(不带@reboot),它通常可以工作(screen -ls列出我的屏幕)。

reboot /usr/bin/screen -dmS test按预期工作。

grep CRON /var/log/syslog给我看Mar 25 17:22:05 pi CRON[509]: (pi) CMD (/usr/bin/screen -dmS nfc /home/pi/.nvm/versions/node/v17.8.0/bin/npm run --prefix /home/pi/nfc/ dev)

有什么想法我做错了吗?

答案1

这个答案基于这样的假设:您的 npm 脚本在某个时刻退出,导致屏幕会话终止。

您可以通过随后运行一些命令来保持屏幕“忙碌”来避免这种情况:

screen -dmS foo sleep 10s

10秒后将退出,而

screen -dmS bar bash -c 'sleep 10s; bash'

将在睡眠后启动 bash shell 并防止screen终止。


在你的 crontab 中,它看起来如下:

@reboot /usr/bin/screen -dmS nfc bash -c '/home/pi/.nvm/versions/node/v17.8.0/bin/npm run --prefix /home/pi/nfc/ dev; exec bash'


如果您的目的不是与脚本交互,而是保留npm脚本的日志输出,您也可以将输出重定向到日志文件,而不是使用screen

@reboot /home/pi/.nvm/versions/node/v17.8.0/bin/npm run --prefix /home/pi/nfc/ dev >> /home/pi/npmscript.log

相关内容