首页 文章

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

提问于
浏览
-1

我有一个bash程序,它从文件中选取数据并将这些数据(如果满足阈值)传递给另一个文件 . 它是一个名为smaoutput-analyse.sh的bash脚本中的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

    您应该检查以下问题:

    • 所有环境变量是否相同?所以从bash调用 printenv 并创建一个cron-job */1 8-22 * * * printenv > /tmp/printenv.txt - >将文件/tmp/printenv.txt的输出与来自bash的printenv进行比较

    • 您是否使用相同的用户和相同的权限执行?执行 echo "$USER" 并创建一个cron-job */1 8-22 * * * echo "$USER" > /tmp/user.txt - >将文件/tmp/user.txt的输出与来自bash的echo "$USER"进行比较

    • 检查执行脚本的路径 . 从bash调用 pwd 并创建一个cron-job */1 8-22 * * * pwd> /tmp/pwd.txt - >将文件/tmp/pwd.txt的输出与来自bash的pwd输出进行比较

  • 0

    真有趣 . 这是我的第一篇文章,我收到了很快的回复 . 谢谢!

    解决方案很简单:提供保存文件的完整路径 . 备注:为了避免一切都将被执行,我总是将cronjobs放在root crontab而不是用户crontab中 . 也许这是“聪明的思考”,但不是那么聪明的表演 . 我很期待对这个根cronjob想法发表一些评论 .

    关于从bash和cron执行printenv,echo“&USER”和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

    来自bash的echo“&USER”给出了pi,而来自cron的回显“&USER”给出了一个空白文件

    来自bash的pwd给出/ home / pi / test和cron / root

    这些结果是可以理解的 .

    我可以从中学习我应该创建cronjobs作为用户pi而不是用户root吗?

相关问题