cron 作业未运行 bash 脚本

cron 作业未运行 bash 脚本

我想创建我管理的 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

一些东西。

  1. &>/tmp/cronout.log只会记录 stdout,而不会记录 stderr。符号“&”可能也会破坏这一点。您想2>&1 >/tmp/cronout.log将 stderr 重定向到 stdout,并将 stdout 重定向到文件。

  2. 你的脚本没有任何内容。第一行应该为#!/bin/bash

  3. 该文件可以执行吗?chmod +x /disks/Media/MC\ Server\ Backups/ftp-backup.sh

相关内容