QNAP 4.1.0 & 使用自己的备份脚本和 crontab

问题描述 投票:0回答:3

我有一个问题,在 qnap nas 上通过 crontab 执行我的脚本。 这非常令人困惑,因为其他测试脚本可以工作并且手动执行此脚本也可以工作。

这是脚本:

#!/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: [email protected]" >> $MAILFILE
echo "From: [email protected]" >> $MAILFILE
echo "" >> $MAILFILE
/usr/bin/tail -13 /mnt/backup-cr/logs/rsync-cr.$bakdate.log >> $MAILFILE
echo "" >> $MAILFILE
echo "" >> $MAILFILE

cat $MAILFILE | ssmtp [email protected]
rm $MAILFILE

这是我的 crontab 条目:

15 0 * * * /share/CACHEDEV1_DATA/.scripts/backup.sh

该脚本具有可执行标志,正如我所说,同一文件夹中的其他脚本也可以工作。

有人有想法吗?因为如果这在 QNAP 上手动工作并且也在另一个 UBUNTU 服务器上的 crontab 中工作,那么我认为我变得愚蠢和偏执:-)

shell backup sh qnap
3个回答
2
投票
  1. 使用 echo 将命令行中的命令存储在 crontab 文件中

    $ echo "1 4 * * * /bin/sh /share/CACHEDEV1_DATA/your-backup-folder/backup.sh" >> /etc/config/crontab

此命令将在凌晨 1 点过 4 分钟运行 backup.sh。

  1. 要使 crontab 在重新启动期间保持不变,您必须执行此命令

    $ crontab /etc/config/crontab

请注意,您无法将脚本保存在 /etc/、/bin/ 或 HDD 目录之外的其他目录中。换句话说,始终将脚本保存在 /share/CACHEDEV1_DATA/your-backup-folder 中。如果不这样做,脚本将在重新启动时被删除。

  1. 重新启动crontab

    $ /etc/init.d/crond.sh restart

  2. 设置正确的权限

    chmod +x /share/CACHEDEV1_DATA/your-backup-folder/backup.sh

等待 cron 运行,看看它是否有效

如需完整指南,请访问:https://www.en0ch.se/qnap-and-cron/


2
投票

我通过使用

sh
命令调用脚本解决了类似的问题,如下所示:

15 0 * * * /bin/sh /share/CACHEDEV1_DATA/.scripts/backup.sh

编辑:必须使用完整路径(即 /bin/sh)调用 sh 命令,否则它将无法工作。


0
投票

请勿将您的脚本命名为包含 nc。

init.d/nc.sh 会在每次重新启动系统时从 /etc/config/crontab 中删除包含此字母的一行

许多 sh 和 init 脚本中有很多模式可以清理并写入 crontab

您可以通过包含“/etc/config/crontab”的 grep 命令找到它

© www.soinside.com 2019 - 2024. All rights reserved.