1 server command-line cron minecraft
我正在做一个 cron 工作,每 5 分钟从我的 ram 中拯救我的 Minecraft 世界。我测试了脚本,它似乎工作正常。
这是脚本的样子:
#!/bin/sh
VOLATILE="/home/jonathan/Games/Minecraft/Server/world/"
PERMANENT="/home/jonathan/Games/Minecraft/Server/world_storage/"
rsync -r -t -v "$VOLATILE" "$PERMANENT"
Run Code Online (Sandbox Code Playgroud)
所以然后我去添加一个cron作业每5分钟运行一次脚本,它似乎没有运行它。
这是我使用的脚本:
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh
Run Code Online (Sandbox Code Playgroud)
有人可以帮我吗?
您没有指定如何添加您的 cronjob。这有很大的不同:如果您crontab -e
在自己的帐户中使用过,脚本会与您的用户一起运行(因此 crontab 条目少了一个字段——运行它的用户,众所周知)。如果您只是将上面的代码片段复制到/etc/cron.d
,它将失败,因为您没有指定用户(或者更确切地说,它没有找到名为“bash”的用户)。所以你应该采取以下步骤:
/var/log/syslog
;它们可能指出可能的错误)Backup.sh
脚本中以查看它是否已启动第三点可以通过多种方式实现:
>>/tmp/testlog.log
在 crontab 条目的末尾添加 a (将输出重定向到您可以调查的文件;此外,a2>&1
将包括错误控制台的输出)echo "Backup.sh started">/tmp/testlog.log
此外:当您打算使用 运行脚本时bash
,您不应该告诉它使用/bin/sh
(这将使其dash
在默认的 Ubuntu 安装中使用),而是/bin/bash
. 然后使其可执行,您甚至可以从 crontab 条目中省略“bash”。
更新:
根据您对我的回答的评论,您曾经crontab -e
创建过作业,并根据您的系统日志执行它,但定义是
*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh &>/dev/null
Run Code Online (Sandbox Code Playgroud)
这会将所有输出重定向到系统中最大的存储空间,即“黑洞”:/dev/null
吃掉所有东西(但从不返回任何东西)。以这种方式重定向 STDOUT 和 STDERR 会剥夺您的任何错误报告——因此您根本不知道它们发生了,更不用说细节了。为了测试,您应该&>/dev/null
完全省略该部分。即使它有效,你也应该只抑制不必要的输出——否则你永远不知道什么时候出了问题。所以最好至少去掉 & 号,这样 Cron 就可以报告任何发生的错误。
此外:一旦输出被重定向(如您的情况为/dev/null
),将另一个重定向附加到末尾将不会产生任何结果,因为一切都已经消失了。因此,我必须将上述建议从“添加 ... 到您的 crontab 条目的末尾”调整为“在您的 crontab 条目中替换它”;)