Raspberry pi 自动运行与 cron 不工作

Raspberry pi 自动运行与 cron 不工作

我尝试了几种不同的解决方案,但没有一个有效。

我在 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无法跟踪系统服务何时可用。它是一个以自我为中心的守护进程,因为它只知道它何时启动,并且它假设所有其他服务也已开始。可能还有其他原因,但这似乎是最有可能怀疑鉴于您提供的信息。

您应该做两件事:

  1. sleep在开始工作之前先花一点时间cron。这将使您的系统有时间安装 USB 记忆棒,并启动可能尚未准备好的任何其他服务cron

  2. 您的脚本中的错误可能会被设置为输出,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纠正了我错误的英语措辞!)

相关内容