【问题标题】:Cron job not run [duplicate]Cron 作业未运行 [重复]
【发布时间】:2017-11-04 05:05:51
【问题描述】:

我有一个 Cron 作业要向我发送电子邮件,但它没有运行:

 #!/bin/bash
TotalMem=$(top -n 1 | grep Mem | awk 'NR==1{print $4}')
UsadoMem=$(top -n 1 | grep Mem | awk 'NR==1{print $8}')
PorcUsado=$(echo "scale=2;($UsadoMem/$TotalMem)*100"|bc)
echo $PorcUsado
UsoCpu=$(top -n 1 | grep Cpu | awk '{print $2}')
echo $UsoCpu

if [ $PorcUsado > 1 ] || [ $UsoCpu > 0 ]; then
   echo MEM: $PorcUsado CPU: $UsoCpu|mail -s "Recursos" "mymail@gmail.com"
fi

我在crontab -e中配置:

* ** * * peter sh /home/peter/scripts/check.sh

脚本直接通过 bash 正常运行,但我没有通过 cron 收到任何电子邮件

感谢您的帮助

【问题讨论】:

  • * * * * * 不是* ** * *。该格式似乎无效。
  • 我修好了,还没有运行:(
  • 当您运行自己的脚本时,这并不是一个真正的编程问题,更适合unix.stackexchange.com/questionssuperuser.com/questions/tagged/linux ...
  • @tink,问题可能出在我的代码中。这是一个合法的编程问题
  • 如果您的脚本在 shell 中运行(我希望它会运行,只是扫视一下),这是一个 cron 使用问题;看看我对你问题的回答。

标签: linux bash shell cron


【解决方案1】:

失去彼得。该语法仅对 /etc/crontab 有效,使用 crontab -e 创建/编辑的用户 crontab 中没有用户名。如果你有chmod +x'd 你的脚本,你也不需要sh

* * * * * /home/peter/scripts/check.sh

P.S.:您可以大大简化您的脚本,节省 greps、两个 awks 和 bc ...

#!/bin/bash
read -r UsoCpu PorcUsado <<< "$(  top -n 1 | awk '/Cpu/{printf "%s\t", $2} /Mem/ {printf "%.2f\n", ($8 / $4)*100 ; nextfile}')"
if [ $PorcUsado > 1 ] || [ $UsoCpu > 0 ]; then
   echo MEM: $PorcUsado CPU: $UsoCpu
fi

【讨论】:

    【解决方案2】:

    您的 cron 应该如下所示:

    * * * * * peter sh /home/peter/scripts/check.sh
    

    希望现在应该运行。

    【讨论】:

    • 尚未运行 :(
    • 您是否为用户 Peter 设置了执行权限?为什么你在你的 cron 中放了“sh”?
    • Peter 的权限为-rwxr-xr-x sh 被插入尝试工作...我删除但还没有工作...
    • vim /etc/crontab: 使用 * * * * * Peter /home/peter/scripts/check.sh
    最近更新 更多