I have a script I run regularly using cron. I would like to get notified by email when these scripts fail. I do not wish to be notified every time they run and produce any output at all.
As such, I am using the script Cronic to run my jobs inside cron, which should mean only error output gets sent, and not just any output.
However, in one script I have a bash function to detect if a directory is empty:
# function to check if directory is empty outputs 0 if empty, or
# some positive integer if it does not
is_dir_empty ()
{
ls -A "$1" | wc -c
}
This function is used in an if statement like this:
if [ "$(is_dir_empty "${local_backup_location}/${folder_to_backup_basename}")" -eq 0 ]; then
# save space by removing diffs older than 1 month
rdiff-backup --remove-older-than 1M --force ${local_backup_location}/${folder_to_backup_basename} || logger -t ${logger_name} "No existing data backup"
fi
occasionally I get an email like this from cronic
Cronic detected failure or error output for the command:
/usr/local/sbin/backup_uploads
RESULT CODE: 0
ERROR OUTPUT:
ls -A /mnt/storage-2/data_upload_backup/upload
STANDARD OUTPUT:
<snip>
TRACE-ERROR OUTPUT:
- folder_to_backup=/mnt/storage-1/sftp_data/sftpuser1/upload
- backup_server=ed-mh-x86001.mydomain.tld
- backup_folder=data_upload_backup
- remote_backup_storage_root=/mnt/storage-2
- local_backup_storage_root=/mnt/storage-2
- logger_name=backup_uploads
- error_report_dir=/root/rdiff-backup-errors
- email_receiver=sysadmin@mydomain.tld
- problems=0
- lockfilename=/root/.backup_uploads_lockfile.pid
- test -e /root/.backup_uploads_lockfile.pid
- echo
- basename /mnt/storage-1/sftp_data/sftpuser1/upload
- folder_to_backup_basename=upload
- hostname
- remote_server_backup_folder=/mnt/storage-2/data_upload_backup_ed-mh-pi01
- mkdir -p /root/rdiff-backup-errors
- logger -t backup_uploads Starting backup for folder /mnt/storage-1/sftp_data/sftpuser1/upload
- test -d /mnt/storage-2
- local_backup_location=/mnt/storage-2/data_upload_backup
- mkdir -p /mnt/storage-2/data_upload_backup
- logger -t backup_uploads Backing up to /mnt/storage-2/data_upload_backup
- mkdir -p /root/rdiff-backup-errors
- test -d /mnt/storage-2/data_upload_backup/upload
- is_dir_empty /mnt/storage-2/data_upload_backup/upload
- wc -c
ls -A /mnt/storage-2/data_upload_backup/upload
- [ 26 -eq 0 ]
- logger -t backup_uploads Starting backup for /mnt/storage-1/sftp_data/sftpuser1/upload
- hostname
- rdiff-backup --ssh-no-compression /mnt/storage-1/sftp_data/sftpuser1/upload /mnt/storage-2/data_upload_backup/upload/
- testssh root@ed-mh-x86001.mydomain.tld
- remote_backup_machine_accessible=0
- [ 0 -eq 0 ]
- remote_backup_location=root@ed-mh-x86001.mydomain.tld:/mnt/storage-2/data_upload_backup_ed-mh-pi01
- logger -t backup_uploads copying local backup up to root@ed-mh-x86001.mydomain.tld:/mnt/storage-2/data_upload_backup_ed-mh-pi01
- rsync -aP --delete-after /mnt/storage-2/data_upload_backup/ root@ed-mh-x86001.mydomain.tld:/mnt/storage-2/data_upload_backup_ed-mh-pi01
- rm -f /root/.backup_uploads_lockfile.pid
- logger -t backup_uploads Lock file /root/.backup_uploads_lockfile.pid deleted, end of script
I do not get this every time the script is run, just occasionally, so perhaps when the directory is actually empty or something like this.
So my question is why am I getting error output from this command, and how to prevent it (at least in the obvious context where i don't want it here)?
This question is very similar to another I asked myself here, but I assure you it is different!