bash脚本从命令行运行但不是从cron

时间:2016-08-14 14:53:48

标签: php linux bash shell cron

我有一个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

我错过了什么

2 个答案:

答案 0 :(得分:0)

您应该检查以下问题:

  • 所有环境变量是否相同?所以从bash调用 printenv 并创建一个cron-job * / 1 8-22 * * * printenv&gt; /tmp/printenv.txt - &gt;将文件/tmp/printenv.txt的输出与来自bash
  • 的printenv进行比较
  • 您是否使用相同的用户和相同的权限执行?执行 echo“$ USER”并创建一个cron-job * / 1 8-22 * * * echo“$ USER”&gt; /tmp/user.txt - &gt;将文件/tmp/user.txt的输出与来自bash
  • 的echo“$ USER”进行比较
  • 检查执行脚本的路径。从bash中调用 pwd 并创建一个cron-job * / 1 8-22 * * * pwd&gt; /tmp/pwd.txt - &gt;将文件/tmp/pwd.txt的输出与来自bash的pwd的输出进行比较

答案 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?