BASH shell脚本在命令提示符下正常工作,但不适用于crontab

时间:2014-02-06 05:27:25

标签: linux bash crontab

这是我想用crontab执行的脚本。

#!/bin/bash
# File of the path is /home/ksl7922/Memory_test/run_process.sh
# 'mlp' is the name of the process, and 'ksl7922' is my user account.

prgep mlp > /home/ksl7922/proc.txt

# This line will give the number of the process of 'mlp'
result=`sed -n '$=' /home/ksl7922/proc.txt`
echo "result = ${result}"

# if 'mlp' processes run less than six, than read text file one line and delete 
# it, and execute this line.

if ((result < 6)); then
    filename="/home/ksl7922/Memory_test/task_reserved.txt"
    cat $filename | while read LINE

    do
        # Delete line first.
        sed -i "$LINE/d" $filename

        # Execute this line
        eval $LINE

        break;
    done
else
    echo "You're doing great."
fi

之后,我编辑了crontab并使用crontab -l <​​/ p>进行了检查

*/20 * * * * sh /home/ksl7922/Memory_test/run_process.sh

此脚本可以从命令行正常运行,但是,它无法与crontab一起正常工作。

似乎shell脚本无论如何都适用于crontab,因为生成了“proc.txt”文件,并删除了第一行“task_reserved.txt”。

但是,我没有看到任何消息,以及'mlp'进程的结果文件。

由于我不擅长英语,所以我担心你们不理解我的意图。 无论如何,任何人都可以让我知道如何处理这个?

2 个答案:

答案 0 :(得分:0)

  1. 我敢打赌PATH环境变量未在cron内正确设置。插入

    echo $PATH > /tmp/cron-path.txt
    

    看看它目前有什么价值。也许您需要在脚本中手动将其设置为适当的值。

    这实际上是FAQ

  2. 如果您的系统上没有安装任何mail cron来转发脚本中的错误消息,那么将所有错误消息手动重定向到首选位置是一种很好的做法。例如

    #! /bin/bash
    {
        date
    
        prgep mlp > /home/ksl7922/proc.txt
        ... snip ...
        fi
    } &> /tmp/cron-msg.txt
    

答案 1 :(得分:0)

您是否检查过脚本的执行权限?该文件应具有可执行权限。

ls -ltr /home/ksl7922/Memory_test/run_process.sh
chmod 755 /home/ksl7922/Memory_test/run_process.sh