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

Jaz*_*uly 6 bash scripts 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
Run Code Online (Sandbox Code Playgroud)

我使它可执行:

sudo chmod +x backup.sh
Run Code Online (Sandbox Code Playgroud)

然后我尝试croncrontab -e.

我加:

# m h dom mon dow command
0 0 * * * /home/jazuly/backup.sh
Run Code Online (Sandbox Code Playgroud)

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

如果我手动运行脚本:

$ sudo chmod +x backup.sh 
$ ./backup.sh
Run Code Online (Sandbox Code Playgroud)

我可以打开压缩文件。

sea*_*ano 6

您将需要在任何 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
Run Code Online (Sandbox Code Playgroud)

  • 扩展名无关紧要。您在关于使用绝对路径的评论中提出的观点很有帮助,但您的回答是错误的:cron 根本不关心扩展。 (3认同)

Jaz*_*uly 1

以下是我修复它的步骤:

  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
    
    Run Code Online (Sandbox Code Playgroud)

    和我的cron

    0 0 * * * /home/jazuly/backup.sh
    
    Run Code Online (Sandbox Code Playgroud)

    每个午夜/每天备份。

    .sh我认为如果文件与您要执行的文件位于同一路径中,则无需编写完整路径。