cron job - ack:命令未找到

时间:2014-10-27 13:49:56

标签: bash cron ack

我有一个bash脚本,我写过它来识别文件中是否存在某个字符串,然后将文件名输出为“noString.txt”的“hasString.txt”。我正在使用ack -i 'mystring' 'searchDir'来查找我正在寻找的内容。

奇怪的是,当我通过终端手动调用脚本时,它工作正常,但是当cron调用脚本时,我得到以下错误消息输出:

~/sourceDir/script.sh: line 30: ack: command not found

为什么在手动调用时它会工作但在cron调用时无法找到ack命令?


编辑:添加相关代码和cron文件

Lookout脚本 - 确定是否有任何要处理的文件。

    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 doc

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

2 个答案:

答案 0 :(得分:3)

这是因为未定义搜索路径。

在脚本中使用完整路径或定义路径

选项1:

/path/to/ack -i 'mystring' 'searchdir'

选项2:

PATH=/path/to/ackdir:$PATH
export PATH

ack -i 'mystring' 'searchdir'

答案 1 :(得分:2)

您需要在cron作业中设置PATH环境变量。 所以将它添加到cron文件的顶部:

 #!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

注意:还要添加#!/ bin / bash,因此您也不必添加shell环境变量。