我有一个bash程序,它从文件中选取数据并将这些数据(如果达到阈值)传递给另一个文件。 它是bash脚本中名为smaoutput-analyse.sh的php脚本 从shell执行时,它的功能非常完美。 当以root身份执行作为cron作业时,执行正确,但没有输出。
以下是grep -i cron /var/log/syslog
Aug 14 16:06:01 raspberrypi CRON[6705]: (root) CMD (/home/pi/scripts/SBFspot.sh > /home/pi/test/smaoutput.txt 2>&1 ) Aug 14 16:06:01 raspberrypi CRON[6706]: (root) CMD (/home/pi/test/smaoutput-analyse.sh > /dev/null 2>&1)
在运行shell时正确添加的信息(如前所述)
#!/usr/bin/php
<?php
echo " Programm to read smaoutput.txt",PHP_EOL;
// etc etc
`if(!file_put_contents("sma_saved_data.txt",$sma_saved_data_string,FILE_APPEND)){
// failure
echo "error opening the file sma_saved_data.txt for writing",PHP_EOL;
}
// etc etc
?>
以下是crontab行:
# Every minute result of SMA
*/1 8-22 * * * /home/pi/scripts/SBFspot.sh > /home/pi/test/smaoutput.txt 2>&1
# afterwards read and save in file
*/1 10-20 * * * /home/pi/test/smaoutput-analyse.sh > /dev/null 2>&1
我认为我为文件设置了文件权限正确+ rw,为bash设置了+ rwx
我错过了什么
答案 0 :(得分:0)
您应该检查以下问题:
答案 1 :(得分:0)
真的很有趣。 这是我的第一篇文章,我收到了很快的回复。 谢谢!
解决方案很简单:提供保存文件的完整路径。 备注:为了避免一切都将被执行,我总是将cronjobs放在root crontab而不是用户crontab中。 也许这就是&#34;聪明的思维&#34;但不那么聪明的表演。 我很期待对这个根cronjob的想法发表一些评论。
关于执行printenv,echo&#34;&amp; USER&#34;的帖子来自bash和cron的pwd很有意思。
来自bash的printenv提供了很多信息,包括SHELL = / bin / bash,SSH_CLIENT,SSH_TTY。 MAIL,PATH,SSH_CONNECTION等等以LS_COLORS开头,来自cron的printenv只有6行HOME = / root,LOGNAME = root,PATH = / usr / bin,LANG = en_GB,UTF-8,SHELL = / bin / sh和PWD = / root
回声&#34;&amp; USER&#34;从bash给出pi,而从cron给出一个空白文件
来自bash的pwd给出/ home / pi / test和cron / root
这些结果是可以理解的。
我是否可以从中学习我应该以用户pi的身份创建cronjobs而不是用户root?