我想创建我管理的 Minecraft 服务器的备份。我编写了一个 bash 脚本,执行 ftp wget 将服务器文件备份到新文件夹。
脚本如下:
TIMESTAMP=$(/bin/date +%Y-%m-%d_%H:%M)
/bin/mkdir /disks/Media/MC\ Server\ Backups/backup/$TIMESTAMP -p
cd /disks/Media/MC\ Server\ Backups/backup/$TIMESTAMP
/usr/bin/wget -r ftp://$FTP_USER:$FTP_PASS@$FTP_ADDR// -l 0 -nH
变量是 ftp 服务器连接详细信息,出于显而易见的原因,它们被省略了。当我单独运行脚本时,它运行完美。我的问题是让它作为 cron 作业运行,这样备份就可以自动进行。在运行 的终端上/
,我输入crontab -e
。
我使用 gedit 添加 cron 作业:
1 4 * * * /disks/Media/MC\ Server\ Backups/ftp-backup.sh
因此它应该每天凌晨 4:01 运行,但实际上没有。问题在于脚本保存在已安装的外部 NTFS 驱动器上吗?我查看了 cron 作业是否在其他地方创建了备份文件夹,但我没有看到其他文件夹。
#!/bin/sh
我在脚本开头 添加了内容。我还在脚本本身上运行了 chmod-x。我还尝试了两种不同的格式来运行我的脚本:
15 25 * * * /disks/Media/MC\ Server\ Backups/ftp-backup.sh &>/tmp/cronout.log
和
15 25 * * * /bin/sh /disks/Media/MC\ Server\ Backups/ftp-backup.sh &>/tmp/cronout.log
最后部分应该记录任何问题,但这些文件根本没有创建。
我一直在测试 cron,通过将作业设置为几分钟后执行。
当使用此命令查看 cron 是否正在运行时:systemctl status cron
,我得到以下输出:
● cron.service - Regular background program processing daemon
Loaded: loaded (/lib/systemd/system/cron.service; enabled; vendor preset: enabled)
Active: failed (Result: signal) since Sun 2019-12-22 12:20:27 EST; 2 weeks 3 days ago
Docs: man:cron(8)
Process: 1081 ExecStart=/usr/sbin/cron -f $EXTRA_OPTS (code=killed, signal=KILL)
Main PID: 1081 (code=killed, signal=KILL)
Dec 22 11:24:38 jlcarveth-MS-7A72 cron[1081]: (CRON) INFO (Running @reboot jobs)
Dec 22 11:30:01 jlcarveth-MS-7A72 CRON[3975]: pam_unix(cron:session): session opened for user jlcarveth by (ui
Dec 22 11:30:01 jlcarveth-MS-7A72 CRON[3976]: (jlcarveth) CMD (/bin/bash /disks/Media/MC\ Server\ Backups/ftp-
Dec 22 12:11:44 jlcarveth-MS-7A72 CRON[3975]: (CRON) info (No MTA installed, discarding output)
Dec 22 12:11:44 jlcarveth-MS-7A72 CRON[3975]: pam_unix(cron:session): session closed for user jlcarveth
Dec 22 12:17:01 jlcarveth-MS-7A72 CRON[11533]: pam_unix(cron:session): session opened for user root by (uid=0)
Dec 22 12:17:01 jlcarveth-MS-7A72 CRON[11534]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Dec 22 12:17:01 jlcarveth-MS-7A72 CRON[11533]: pam_unix(cron:session): session closed for user root
Dec 22 12:20:27 jlcarveth-MS-7A72 systemd[1]: cron.service: Main process exited, code=killed, status=9/KILL
Dec 22 12:20:27 jlcarveth-MS-7A72 systemd[1]: cron.service: Failed with result 'signal'.
据我所知,cron 运行不正确,但我不知道如何纠正它。
不确定我改变了什么,但以下内容似乎可以运行:
50 16 * * * /disks/Media/MC\ Server\ Backups/ftp-backup.sh
答案1
一些东西。
&>/tmp/cronout.log
只会记录 stdout,而不会记录 stderr。符号“&”可能也会破坏这一点。您想2>&1 >/tmp/cronout.log
将 stderr 重定向到 stdout,并将 stdout 重定向到文件。你的脚本没有任何内容。第一行应该为
#!/bin/bash
该文件可以执行吗?
chmod +x /disks/Media/MC\ Server\ Backups/ftp-backup.sh