BASH shell 脚本在命令提示符下正常工作,但不适用于 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

进行了检查
*/20 * * * * sh /home/ksl7922/Memory_test/run_process.sh

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

似乎无论如何都可以使用crontab,因为生成了'proc.txt'文件,并且删除了'task_resverd.txt'的第一行。

但是,我没有看到任何消息,也没有看到" MLP"进程的结果文件。

由于我不擅长英语,所以恐怕你们不明白我的意图。无论如何,谁能让我知道如何处理?

  1. 我的赌注是PATH环境变量在cron中未正确设置。插入

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

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

    这实际上是常见问题

    • https://askubuntu.com/questions/23009/reasons-why-why-crontab-does-not-work
    • https://askubuntu.com/questions/117978/script-doesnt-run-via-via-via-crontab-works-forks-fine-standalone
  2. 如果您在系统上没有任何mail安装供cron转发脚本中的错误消息,则可以手动将所有错误消息重定向到您的首选位置是一个好习惯。例如

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

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

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

相关内容

  • 没有找到相关文章

最新更新