我有一個bash腳本,我已經寫出來確定某個字符串是否存在於某個文件中,然後將文件名輸出到「noString.txt」的「noString.txt 」。我正在使用ack -i 'mystring' 'searchDir'
來查找我要找的內容。cron job-ack命令沒有找到
奇怪的是,當我手動調用腳本通過終端它完美,而是當的cron調用腳本我得到以下錯誤消息輸出:
~/sourceDir/script.sh: line 30: ack: command not found
。
爲什麼它會在手動調用時工作,但在被cron調用時無法找到ack命令?
編輯:添加相關的代碼和cron文件
山腳本 - 確定是否有任何文件要處理。
if [[ $(ls -A ${PWD}/*.zip) ]]; then
while [ $different -eq 1 ]; do
du -h 1> $compare1
ls -laR >> $compare1
sleep 25s
du -h 1> $compare2
ls -laR >> $compare2
if cmp $compare1 $compare2 ; then
mkdir -p $LOGAREA
mkdir -p $workarea/zip/unzip
touch $LOG
touch $ERRORLOG
sleep 2s
source ~/Desktop/Scripts/readfolderfiles.sh $drop
mv *epub $workarea
rm $compare1
rm $compare2
bash ~/Desktop/Scripts/Page_Label/script/searchString.sh
different=0
else
echo
fi
done 1> $LOG 2> $ERRORLOG
else
rm ~/Desktop/page_labels.running
rm $drop/page_labels.running
fi
識別和報告腳本 - 生成在頂部
for files in *.zip; do
#move and unzip the files
mv $workarea/$files $workarea/zip/unzip/${files%.epub}.zip
sleep 2s
unzip zip/unzip/*.zip -d zip/unzip/${files%.epub}
mv zip/unzip/*.zip zip
sleep 2s
cd $workarea/zip/unzip
for dir in *; do
# Search the files for the searchString
if ack --ignore-case 'searchString' $dir; then
echo $dir >> $drop/Has_searchString.txt
echo
rm -r $dir
sleep 5s
else
echo $dir >> $drop/No_searchString.txt
echo
rm -r $dir
sleep 5s
fi
done
cd $workarea
done
的Cron文檔
#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
#### Backup Files
* * * * 1,2,3,4,5 bash ~/Desktop/Scripts/searchScript.sh &> /dev/null;
的cron的環境是非常有限的,的'路徑ACK '可能不知道它。因此,您可以在腳本中添加完整路徑('/ bin/ack -i'mystring''searchDir''或任何您從'ack'中獲得的內容]。 – fedorqui 2014-10-27 13:53:01
@fedorqui我試過了。沒有骰子。仍然只在手動調用時才起作用 – 2014-10-27 14:56:32
確定,然後將您的代碼的相關部分與您的cronjob語法一起發佈。 – fedorqui 2014-10-27 15:02:58