script does not write to file when executed from cron
To get the log file where you expect it to be, replace:
LOG_FILE="test-crontab.log"
With:
LOG_FILE="/home/ubuntu/sam/scripts/sqlplus-scripts/accts-ct/test-crontab.log"
The command
[[ ${?} != 0 ]]
is bash-only. From the error message that you quote, the script appears to be running under/bin/sh
. One way to fix that is to replace:if [[ ${?} != 0 ]]; then
With:
if [ ${?} != 0 ]; then
Another approach is to run
crontab -e
and add the following line to yourcrontab
file:SHELL=/bin/bash
Also, for simplicity and style, consider replacing:
echo `date` >> ${LOG_FILE}
with:
date >> "${LOG_FILE}"
This eliminates a useless use of echo.
Lastly, consider putting double-quotes around all shell variables, particularly
$LOG_FILE
. Because the current value ofLOG_FILE
contains no spaces or shell-active characters, this is not needed now. But, putting double-quotes around them will will prevent unpleasant surprises in the future.
Related videos on Youtube
Sam
Updated on September 18, 2022Comments
-
Sam over 1 year
When I run a /bin/bash script, it works fine and it logs into some log files inside the script. But, when I run it from cron, it does not log to the file! it only logs to /var/mail/root , saying that
Date: Fri, 12 Aug 2016 08:39:01 +0300 (MSK) /bin/sh: 1: root: not found
this is the script:
#!/bin/bash LOG_FILE="test-crontab.log" echo "started testing cron" >> ${LOG_FILE} pgrep tunnel if [[ ${?} != 0 ]]; then echo "Tunnel process is not running..." | tee -a ${LOG_FILE} echo "initializing tunnel..." | tee -a ${LOG_FILE} /usr/local/bin/stunnel | tee -a ${LOG_FILE} 2>&1 fi echo `date` >> ${LOG_FILE}
and this is the cron:
45 8 * * * /home/ubuntu/sam/scripts/sqlplus-scripts/accts-ct/test-crontab.sh > /dev/null
-
John1024 over 7 yearsTwo issues: (1) the script is running under
sh
but is usingbash
features, and (2) LOG_FILE should specify a complete path. (Neither of these issues, though, explains the error message.) -
Alex Lowe over 7 yearsDid you do
chmod u+x /home/ubuntu/sam/scripts/sqlplus-scripts/accts-ct/test-crontab.sh
? -
Sam over 7 years@Alex - yes it has x permission for all.
-
Sam over 7 years@john- it creates the file in the same folder script runs. So, that is not the issue. Script runs as expected when executed manually. about the sh, I think cron uses sh instead of bash. I don't know how to make it compatible
-
John1024 over 7 years"it creates the file in the same folder script runs" According to the question, it wasn't writing to the file. Are you saying that the cron job does succeed in creating a file but fails to write to it?
-
Sam over 7 yearsno, I say if I run the script manually, it creates and writes to the file itself.
-
John1024 over 7 yearsPlease look in your home directory and see if a file named
test-crontab.log
exists there also. -
Sam over 7 yearsyes! it has generated all the log files and script output zip files in the root directory! to solve the problem should I convert all absolute paths in the scripts to full path and then I think it will be fine. right?
-
-
FKEinternet over 4 yearsThe user field is only present in crontab files saved in /etc/cron.d. In user-specific crontab files, the user field isn't present: The file's owner is the user.