I have a series of scripts, written to back up files from locations on my PC to locations on my network storage.
None of the commands appear to require sudo (I can run them all as a user).
All of the locations & files are accessible without root.
All of the scripts are stored in ~/.local/bin
I have a daily cron job set up to run these scripts in sequence. When the script is run by cron rather than by me manually, I have found that elements of the script don't happen.
#!/bin/bash # use "if test -e" to detect whether a file on the networked drive is online: if test -e /network-drive/online-test # if the file is detected, run the backup job. otherwise display an error: then echo "network drive is online - proceeding with backup" # useful if running from command line # backup job syntax: rsync /pc-location/ /network-drive-location/ # rsync command also writes to a log file else # error message: notify-send --expire-time=6000 'network drive is not online' 'BACKUP FAILED' # displays a pop up error message aplay -q /usr/share/sounds/sound-icons/cembalo-12.wav # plays a sound echo "network drive is not online - BACKUP FAILED" # useful if run from command line echo "network drive was not online - BACKUP FAILED" > /folder/on/pc/dated-logfile # set error exit status so subsequent jobs don't run if && is used: exit 1 fi
I have about 7 of these scripts (let's call them script1, script2 etc) backing up from and to different locations on the PC and network drive.
They run fine if triggered from the command line. In tests, if the network drive is offline, the pop-up error message appears, the sound is played, and the log file is written telling me the drive was offline.
I have a cronjob (added with crontab -e) written as follows:
00 16 * * * /home/user/.local/bin/script-1 && /home/user/.local/bin/script-2 && /home/user/.local/bin/script-3 && /home/user/.local/bin/script-4 && /home/user/.local/bin/script-5 && /home/user/.local/bin/script-6 && /home/user/.local/bin/script-7
So at 16:00 daily, cron runs script1 if the PC is on.
If the drive is online, fine, everything works and it moves on through scripts 2-7. If one works, they all work.
If the drive is offline, then the else commands in script1 should run - an error message, a sound, a log file, and then the job should end because of the exit status, and no attempt made to run scripts 2-7.
However I've noticed that one or more of the commands in the else part of the script don't happen.
Most notably - there is no pop-up error message from the notify-send command when the script is run by cron, if the network drive is offline.
Sometimes there is no sound played.
There is always a log file written.
Possible reasons for this inconsistency?