我尝试了几种不同的解决方案,但没有一个有效。
我在 Raspberry Pi 4 上安装了一个 USB 存储设备,USB3 端口为 4GB。挂载目录为/media/usbstick/
.
在此位置有一个文件夹,其中包含我的《我的世界》服务器。我那里还有一个 shell 脚本:
#!/bin/sh
cd /media/usbstick/minecraft/
/usr/bin/screen -S minecraft /usr/bin/java -jar -Xmx3000M -XX:ParallelGCThreads=4 -XX:+UseParallelOldGC /media/usbstick/minecraft/paperclip.jar
如果我先输入以下内容手动启动它,效果很好:
cd /media/usbstick/minecraft/
然后通过键入以下内容来执行它:
./start.sh
我尝试设置一个 crontab:
crontab -e
并在行尾写道:
@reboot /media/usbstick/minecraft/start.sh
但这不起作用。
答案1
您的cron
作业可能无法启动,因为cron
无法跟踪系统服务何时可用。它是一个以自我为中心的守护进程,因为它只知道它何时启动,并且它假设所有其他服务也已开始。可能还有其他原因,但这似乎是最有可能怀疑鉴于您提供的信息。
您应该做两件事:
sleep
在开始工作之前先花一点时间cron
。这将使您的系统有时间安装 USB 记忆棒,并启动可能尚未准备好的任何其他服务cron
。您的脚本中的错误可能会被设置为输出,
srderr
并写入您的终端。但是由于您的cron
工作没有可写入的终端,那么您必须重定向将其保存到日志文件中以查看它。
我对您的工作做了一些小改动,cron
以完成上述两项建议:
@reboot (sleep 30; /media/usbstick/minecraft/start.sh) >> /home/pi/cronjoblog.txt 2>&1
如果您愿意的话,您可以使用其他方法(例如检查驱动器是否已安装),但这很容易做到,即使sleep
不能解决问题,您重定向到的文件也会有一些线索。
答案2
所以我已经修复了它。基本上 screen 只能在“拥有用户”终端上运行,因此您必须以分离模式执行它:
您必须使用-d
(启动分离会话)和-m
(防止使用 $STY 环境变量)。
谢谢大家,你们的回答对我帮助很大!
(也感谢@ctrl-alt-delor纠正了我错误的英语措辞!)