QNAP’s Cron isn’t the best they’ve accomplished… It’s buggy, and you have to know what you’re doing in order to get it working, because it’s not working as it does on a regular Debian server like Ubuntu i.e.
Some examples that confused us
Just to give you some examples; on every reboot of the NAS the entries are deleted if not saved properly. Also, normally you just use crontab -e to edit the scheduled jobs, but it’s impossible to write something in that file for some reason. Other than that, QNAPs Wiki isn’t updated since 2013 and different guides on the Internet gives different instructions. You could get gray hairs for less.
We spent several hours on this “issue” before we sorted it out, and to save you guys some time – just follow the guide below.
Edit the crontab file
We will provide two options here, both options are doing the same thing, but in different ways. Pick the one that you prefer.
A: Edit the crontab located in /etc/config/ directly inside the crontab
The crontab file will look something like this
10 1 * * * /bin/sh /share/CACHEDEV1_DATA/en0ch.se/backup.sh 10 2 * * * /bin/sh /share/CACHEDEV1_DATA/FSGO/backup.sh 0 4 * * * /sbin/hwclock -s 0 3 * * * /sbin/vs_refresh 0 3 * * * /sbin/clean_reset_pwd 0-59/15 * * * * /etc/init.d/nss2_dusg.sh 30 7 * * * /sbin/clean_upload_file 0 2 * * * /sbin/qfstrim 0-59/10 * * * * /etc/init.d/storage_usage.sh 30 3 * * * /sbin/notice_log_tool -v -R 0 3 * * 0 /etc/init.d/idmap.sh dump 10 15 * * * /usr/bin/power_clean -c 2>/dev/null 30 7 * * * /usr/local/sbin/version_cleaner -t 0 > /dev/null 2>/dev/null 9 3 * * * /usr/bin/qcloud_cli -c 0 0 * * 1 /etc/init.d/antivirus.sh scan 1 0 0 * * * /etc/init.d/antivirus.sh archive_log 28 0 */1 * * /etc/init.d/antivirus.sh update_db 4 3 * * 3 /etc/init.d/backup_conf.sh
As you can see, the bold entries are the ones we made. To add the entries with the VI editor you first have to press “i” for insert, add your commands, and then [CTRL+C] to stop insert, and last but not least press “:wq” to write and quit.
B: Use echo to store your command in the crontab file from the command line
$~: echo "1 4 * * * /bin/sh /share/CACHEDEV1_DATA/your-backup-folder/backup.sh" >> /etc/config/crontab
This command will run backup.sh 1 minute past 4 AM.
Load the crontab file to make the changes stick
To make the crontab persistent during reboot, you have to execute this command
$~: crontab /etc/config/crontab
Please note that you cannot save the script in /etc/, or /bin/ or some other directory outside of your HDD directories. In other words, always save your script in /share/CACHEDEV1_DATA/your-backup-folder. If you don’t, the script will be deleted upon reboot.
$~: /etc/init.d/crond.sh restart
Wait for the cron to run, and see if it works
If it doesn’t work, it could be that you missed something. Read the important hints below, and if it still doesn’t work send Daniel an email.
1. Always start your script with the correct SHEBANG. On my QNAP TS-269 PRO that is
2. Always start your command with
* * * * * /bin/sh [command]
If you don’t, the scripts will not be executed.
3. Don’t forget to give your script the correct permissions in order to be able to be executed by cron.
$~: chmod +x /path-to-script/backup.sh
4. Always end your script with one empty line.