所以我创建了一个用于备份系统的脚本,我进行了测试并且它有效。这是脚本:
#!/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 未运行,否则您的脚本中没有明显损坏的内容会阻止其运行。
您使用的所有命令(date
、hostname
、tar
和ls
)都应该在 中/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"