如何将 bash 脚本添加到 cron 作业?

如何将 bash 脚本添加到 cron 作业?

我有一个名为的脚本backup.sh

#!/bin/bash
sudo zip -r /home/jazuly/backup.zip /var/lib/automysqlbackup/
cd /home/jazuly/backupscript/cp2google/
php cp2google.php /home/jazuly/backup.zip
cd ~
rm -f /home/jazuly/backup.zip

我让它可执行:

sudo chmod +x backup.sh

然后我尝试cron用进行编辑crontab -e

我加:

# m h dom mon dow command
0 0 * * * /home/jazuly/backup.sh

但是当cron将 backup.zip 发送到我的电子邮箱时,我下载并打开它,却发现文件已损坏。

如果我使用以下方法手动运行脚本:

$ sudo chmod +x backup.sh 
$ ./backup.sh

我可以打开该 zip 文件。

答案1

您将需要在任何 cron 执行脚本中使用完整路径。因此,不要执行cd ~,而是给出cd /home/jazuly

为了进一步调试,您还可以将 cron 脚本的输出重定向到文件,使用/home/jazuly/backup.sh 1> /home/jazuly/log.txt 2> /home/jazuly/err.txt

因此整个命令:

# m h dom mon dow command
0 0 * * * /bin/bash /home/jazuly/backup.sh 1> /home/jazuly/log.txt 2> /home/jazuly/err.txt

答案2

尝试使用完整路径

#!/bin/bash
/usr/bin/zip -r /home/jazuly/backup.zip /var/lib/automysqlbackup/
/usr/bin/php /home/jazuly/backupscript/cp2google/cp2google.php /home/jazuly/backup.zip
rm -f /home/jazuly/backup.zip

并添加/bin/bashcron

# m h dom mon dow command
0 0 * * * /bin/bash /home/jazuly/backup.sh

并检查文件的权限backup.zipbackupdatabaseterbaru-c771cd4f4fcf.p12

答案3

以下是我修复该问题的步骤:

  1. 将 的权限 & 所有者更改var/lib/automysqlbackup777& jazuly.jazuly
  2. 将所有文件夹和文件从backupscript/cp2google/移动到home/jazuly
  3. 用于wait每个语句。
  4. 我的最终代码:

    #!/bin/bash
    zip -r backup.zip /var/lib/automysqlbackup/
    wait
    php cp2google.php backup.zip
    wait
    rm -f backup.zip
    

    和我的cron

    0 0 * * * /home/jazuly/backup.sh
    

    每天午夜/白天备份。

    .sh如果文件与您要执行的路径相同,我认为就没有必要写完整路径。

相关内容