2016-08-14 278 views
-1

我有一個bash程序,它從文件中選取數據並將這些數據(如果滿足閾值)傳遞給另一個文件。 這是一個名爲smaoutput-analyse.sh的bash腳本中的php腳本。當從shell執行它時,它的功能非常完美。 作爲cron作業執行時,作爲root執行的是正確的,但沒有輸出。bash腳本從命令行運行但不是從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) 

輸出的信息是(如前面提到的)正確地添加運行FOM當殼

#!/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 

我想我已經爲文件和+ rwx設置了文件權限正確+ rw在bash

我錯過了什麼

+0

Cron腳本在非常有限的環境下運行,這意味着'PATH'和其他環境變量可能不是您所期望的。工作目錄可能也不是你所期望的。 –

+0

將'sma_saved_data.txt'替換爲您要保留文件的絕對路徑。 –

回答

0

您應檢查以下問題:

  • 是否所有的環境變量一樣嗎?所以請致電printenv bash並創建一個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 - >比較file/tmp/user的輸出。 txt帶回聲「$ USER」來自bash
  • 檢查您執行腳本的路徑。從bash調用pwd並創建一個cron-job */1 8-22 * * * pwd> /tmp/pwd.txt - >比較文件/tmp/pwd.txt的輸出與pwd的輸出來自bash
0

真是有趣。 這是我的第一篇文章,我收到了相當迅速的迴應。 謝謝!

解決方案很簡單:提供要保存文件的完整路徑。 備註:爲了確保一切都將被執行,我總是將cronjobs放在根crontab中,而不是放在用戶crontab中。 也許這是「聰明的思維」,但不是那麼聰明的行爲。 我希望得到這個root cronjob想法的一些評論。

關於執行printenv,echo「& USER」和pwd都來自bash和cron的帖子很有趣。

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 = /根

回聲 「& USER」 從bash中給出PI,同時從cron給出了一個空白文件

從bash的該PWD給出的/ home/PI /測試和從cron /根

這些結果是可以理解的。

我可以從中學習到,我應該創建cronjobs作爲用戶pi而不是用戶root?

相關問題