我有一个问题,通过crontab在qnap nas上执行脚本。这是非常令人困惑的,因为其他的测试脚本工作和执行这个脚本手动工作。
脚本如下:
#!/bin/sh
[[ ! -d /mnt/backup-cr/daily.0 ]] && mount -t nfs -o nolock 192.168.178.2:/volume1/backup-cr /mnt/backup-cr
#1
[[ -d /mnt/backup-cr/daily.7 ]] && rm -rf /mnt/backup-cr/daily.7
#2
[[ -d /mnt/backup-cr/daily.6 ]] && mv /mnt/backup-cr/daily.6 /mnt/backup-cr/daily.7
[[ -d /mnt/backup-cr/daily.5 ]] && mv /mnt/backup-cr/daily.5 /mnt/backup-cr/daily.6
[[ -d /mnt/backup-cr/daily.4 ]] && mv /mnt/backup-cr/daily.4 /mnt/backup-cr/daily.5
[[ -d /mnt/backup-cr/daily.3 ]] && mv /mnt/backup-cr/daily.3 /mnt/backup-cr/daily.4
[[ -d /mnt/backup-cr/daily.2 ]] && mv /mnt/backup-cr/daily.2 /mnt/backup-cr/daily.3
[[ -d /mnt/backup-cr/daily.1 ]] && mv /mnt/backup-cr/daily.1 /mnt/backup-cr/daily.2
#3
[[ -d /mnt/backup-cr/daily.0 ]] && cp -al /mnt/backup-cr/daily.0 /mnt/backup-cr/daily.1
#4
bakdate=$(date +%Y%m%d%H%M)
/usr/bin/rsync -av
--stats
--delete
--human-readable
--log-file=/mnt/backup-cr/logs/rsync-cr.$bakdate.log
/share/cr/
/mnt/backup-cr/daily.0
MAILFILE=rsync-cr.$bakdate.log.tmp
echo "Subject: rsync-log for cr from srv" > $MAILFILE
echo "To: x@x.com" >> $MAILFILE
echo "From: y@y.com" >> $MAILFILE
echo "" >> $MAILFILE
/usr/bin/tail -13 /mnt/backup-cr/logs/rsync-cr.$bakdate.log >> $MAILFILE
echo "" >> $MAILFILE
echo "" >> $MAILFILE
cat $MAILFILE | ssmtp x@x.com
rm $MAILFILE
下面是我的crontab条目:
15 0 * * * /share/CACHEDEV1_DATA/.scripts/backup.sh
该脚本具有可执行标志,并且正如我所说的,同一文件夹中的其他脚本也可以工作。
有人有主意吗?因为如果这在QNAP上手动工作,并且在另一个UBUNTU服务器上也可以在crontab上工作,那么我想我变得愚蠢和偏执了:-)
-
使用echo从命令行
将命令存储在crontab文件中$ echo "1 4 * * * /bin/sh /share/CACHEDEV1_DATA/your-backup-folder/backup.sh" >> /etc/config/crontab
此命令将运行backup.sh。
-
要使crontab在重新启动期间持久化,必须执行以下命令
$ crontab /etc/config/crontab
-
重启crontab
$ /etc/init.d/crond.sh restart
-
设置正确的权限
chmod +x /share/CACHEDEV1_DATA/your-backup-folder/backup.sh
请注意,您不能将脚本保存在/etc/或/bin/或硬盘目录以外的其他目录中。换句话说,始终将脚本保存在/share/CACHEDEV1_DATA/your-backup-folder中。如果不这样做,脚本将在重新启动时被删除。
等待cron运行,看看它是否工作
完整指南,请访问:https://www.en0ch.se/qnap-and-cron/
我通过使用sh
命令调用脚本解决了类似的问题,如下所示:
15 0 * * * /bin/sh /share/CACHEDEV1_DATA/.scripts/backup.sh
编辑:sh命令必须以全路径(即/bin/sh)调用,否则将无法工作