我正在尝试使用
@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