Bash script returns different value when run from cron job than from command line

二次信任 提交于 2019-12-24 08:18:30

问题


I have a bash script that is intended to be run from cron. The script counts the words in document, and appends a line with the current time and the word count to a CSV file. In relevant part, the script is:

EPOCH=$(date +"%s")
WCC=$(wc -w ~/path/filename.txt | sed 's/\/Users\/username\/path\/filename.txt//' | sed 's/ //g')
echo $EPOCH,$WCCH4 >> ~/path/wordcount-data.csv

This script is run from cron with the following entry:

0   *   *   *   *   sh /Users/username/path/wordcount.sh

The problem is that wc -w returns a different value when run from cron than when run from the shell or when run from the shell script executed in the terminal. In other words, the value of this script executed from cron is currently 12438, but running wc -w filename.txt in the shell or running sh ./wordcount.sh both return values of 12445. For what it's worth the difference is always 7, and vim's word count matches the word count run from cron.

What accounts for the different values, and how do I fix it?


回答1:


Try to add

source ~/.bashrc

after the shebang, and another important thing :

don't call the script with sh if it's bash !

With sh, bash is in POSIX mode. I suspect that's not intended here.




回答2:


When you run sh ./wordcount.sh which user is running the script?

I suspect that the user that is executing cron won't be the same, so it's home (~) directory is different.

I'd change any reference to ~ in your script to absolute directory paths.




回答3:


Agreeing with beny23 here, the most common error in cron script sources from the fact, that cron doesn't inherit your PATH. You have to set a cronpath inside the crontab, or use absolute paths.

A second error source might be, that it gets run from a differnt user.

A third one, that you call sh scriptname, not scriptname directly, which means the shebang is ignored. Why do you do so? Isn't the script marked executable?




回答4:


I lost a lot of time with this, and it was just missing at the beginning of the shell script file: #!/bin/bash



来源:https://stackoverflow.com/questions/9873034/bash-script-returns-different-value-when-run-from-cron-job-than-from-command-lin

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!