我的 backup_system.sh 文件没有在 crontab 下运行

我的 backup_system.sh 文件没有在 crontab 下运行

所以我创建了一个用于备份系统的脚本,我进行了测试并且它有效。这是脚本:

#!/bin/bash
backup_files="/home /var/spool/mail /etc /root /boot /opt"
dest="/mnt/backup"
day=$(date +%F)
hostname=$(hostname -s)
archive_file="$hostname-$day.tgz"
echo "Backing up $backup_files to $dest/$archive_file"
date
echo
tar czf $dest/$archive_file $backup_files
echo
echo "Backup finished"
date
ls -lh $dest

但是当把它放入 crontab 时,它不起作用。我使用“crontab -e”并将以下命令行放在那里

* * * * * /root/backup_system.sh

我等待着,什么也没发生。我不知道我哪里错了。 @我正在运行 Ubuntu 14.04,该脚本已使用 chmod 更改了权限。

答案1

除非您的脚本不可执行(使用 修复该问题chmod +x /root/backup_system.sh)或者 crond 未运行,否则您的脚本中没有明显损坏的内容会阻止其运行。

您使用的所有命令(datehostnametarls)都应该在 中/bin,它应该在默认路径中......除非您在 crontab 中更改了它。

最可能的解释是您尝试从用户的 crontab 而不是 root 的 crontab 运行此脚本。并且该用户没有对该/root目录或/root/backup_system.sh脚本的读取和执行访问权限。


顺便说一句,你应该总是用双引号引用你的变量。对于包含事物列表(例如$backup_files)的变量,最好使用数组变量。

这是脚本的改进版本,可以解决这些问题:

#!/bin/bash

backup_files=(/home /var/spool/mail /etc /root /boot /opt)
dest='/mnt/backup'
day=$(date +%F)
hostname=$(hostname -s)
archive_file="$dest/$hostname-$day.tgz"

echo "Backing up ${backup_files[@]} to $archive_file"
date
echo

tar czf "$archive_file" "${backup_files[@]}"

echo
echo "Backup finished"
date

ls -lh "$dest"

相关内容