Hello ALL,
Last days I faced a strange issue with a shell script running as crontab job.
I had a Shell Script with working properly when executing manually, it functions simply sent an email with embedded attachments. However, when it scheduled in Crontab, it does not send attachments ( I received the email but with BLANK attachments – even if code running fine and sending attachments when executed manually).
It made my brain burn for some time, then I found a lot of people facing the same issue when scripts in crontab.
It looks for some crontab relation with SH/Bash scripts.
Here are the workarounds I found and deployed in my script. Now, the email attachments are being included in emails when running as crontab jobs.
- Include: ‘#!/bin/sh’ or ‘#!/bin/bash’ in the first line of your shell script.
- Insert full path of commands you using in statements. E.g: Are you using ‘mailx’? so, execute ‘whereis mailx’, then, all statements where mailx is running will be like ‘/usb/bin/mailx -s “SUBJECT” myemail@domain.com’.
- Source your sh/bash profile before the email statement. This statement solved my error. I found some posts explanations, but not sure why
- ‘. ~/.bash_profile’.
Here is my code:
#!/bin/sh ################################################################################ # Email alerting to ################################################################################ EMAILTO="youremail@company.com" # The email to send the alert to SUBJECT="My shell script in crontab" # email subject . ~/.bash_profile sqlplus /nolog < /dev/null 2>&1 connect / as sysdba spool /tmp/temp_out.txt select * from dual spool off EOF cat /tmp/temp_out.txt |grep "no rows selected" if [ $? == 0 ]; then echo "Nothing to do" /usr/bin/echo "Nothing to do"| /usr/bin/mail -s "${SUBJECT}" ${EMAILTO} else /usr/bin/cat /tmp/temp_out.txt | /usr/bin/mail -s "${SUBJECT}" ${EMAILTO} fi rm /tmp/temp_out.txt