Bash Crontab可以';t在脚本中执行命令

Bash Crontab可以';t在脚本中执行命令,bash,sh,crontab,Bash,Sh,Crontab,我编写了一个shell脚本,当装载点达到90%的容量时,它会删除目录中最旧的日志文件。当我手动运行脚本时,它工作正常,但当我尝试使用crontab运行脚本时,它似乎无法执行实际的rm命令,但它会执行脚本中的所有其他命令。请参阅下面我的crontab和脚本 0 * * * * /acsmgmt/iselogs/iselogcleanup.sh #!/bin/bash df -H | grep /acsmgmt | awk '{ print $4 " " $5 }' | while read o

我编写了一个shell脚本,当装载点达到90%的容量时,它会删除目录中最旧的日志文件。当我手动运行脚本时,它工作正常,但当我尝试使用crontab运行脚本时,它似乎无法执行实际的rm命令,但它会执行脚本中的所有其他命令。请参阅下面我的crontab和脚本

0 * * * *  /acsmgmt/iselogs/iselogcleanup.sh

#!/bin/bash
df -H | grep /acsmgmt | awk '{ print $4 " " $5 }' | while read output;
do
    #!echo $output
    usep=$(echo $output | awk '{ print $1 }' | cut -d '%' -f1)
    #!echo $usep

    if [ $usep -ge 90 ]; then
            echo $(date) "Logs cleaned up" >> /tmp/isecleanup.log
            rm -v `ls /acsmgmt/iselogs -rt | grep "iselog-" | head -1` >> /tmp/isecleanup.log
    else
            echo $(date) "No logs to clean up" >> /tmp/isecleanup.log
    fi
done

因此,正如我所怀疑的那样,答案确实是始终确保在
cron
调用的任何脚本中指定正确且完整的
PATH
变量


(我自己也一直犯同样的错误,即使在编写了多年的cron脚本之后——cron的某些版本允许您为所有脚本指定默认路径(和其他环境变量),这会有所帮助,但也需要仔细维护。)

在cron下运行时,脚本是否会产生任何错误?您可能希望使用类似于
0****/acsmgmt/iselogs/iselogcleanup.sh>/tmp/errors 2>&1
,将脚本的stdout/stderr重定向到一个文件,然后在脚本运行后查看该文件。请尝试一下。错误文件中未显示任何输出。Cron可以执行脚本中的所有内容,除了以下语句rm-v
ls/acsmgmt/iselogs-rt | grep“iselog-”| head-1
>/tmp/isecleanup.log。我所有的回音都显示大写字母try
iselog=$(ls/acsmgmt/iselogs-rt | grep“iselog-”| head-1)
然后执行
rm-v$iselog>/tmp/isecleanup.log
如果将
ls
管道输出到文件中,您在日志中看到正确的输出了吗?使用I'L'I的想法进行了一些修改后,它开始工作了。Cron找不到head,所以我使用绝对路径。此外,我还必须对$iselog变量使用append-absolute-path,以便rm知道它是什么。