Cron 任务不起作用

Cron 任务不起作用

我有一个名为 sh 的文件,m.sh其内容如下:

echo "Cleaning memory"
sync; echo 3 > /proc/sys/vm/drop_caches
echo ""
free -m

echo ""

ps cax | grep java > /dev/null
if [ $? -eq 0 ]; then
  echo "== Server is already running =="
else
  sh a.sh
  echo "========== STARTING THE SERVER =========="
fi

当我用它运行它时,sh m.sh它运行完美。但我需要它每 5 分钟运行一次,所以我使用 cron 作业。它需要以 root/sudo 身份运行,所以我执行了sudo -s,然后crontab -e在文件中写入以下内容:

0,4,9,14,19,24,29,34,39,44,49,54 * * * * /bin/sh /home/<username>/m.sh

我做了一些研究,了解到 cron 的路径与用户的路径不同,这就是为什么我使用这些绝对路径来确保。

cron 作业并未像预期的那样每 5 分钟运行一次脚本。

我还添加了

* * * * * /bin/echo "Testing123"

测试 cron 是否正常工作,但控制台中没有任何内容出现。

我如何让 cron 每 5 分钟运行一次脚本?我在网上进行了研究,并尝试了解决方案,但无法让它为我工作。我这样做了,service cron start它说它已经在运行。我还重新启动了服务。权限设置正确,我给了所有用户读取、写入和执行权限只是为了确保(我知道权限是正确的)。

答案1

关于您的测试脚本——crontab 作业未连接到物理控制台,因此不要期待任何输出。尝试

* * * * * /bin/touch /tmp/foo

...并查看/tmp/foo文件是否已更新。应该会。

要让脚本每五分钟运行一次,有一个快捷方式:

*/5 * * * * /bin/sh /whatever/script/blah.sh

此外,我会编辑你的脚本,以便它记录其活动。例如,

LOGFILE=/var/log/leoncleaner.log
# ...
echo `date '+%Y-%m-%d %H:%M:%S'` Starting server >> $LOGFILE

或者,您可以直接重定向 crontab 文件的输出:

*/5 * * * * /bin/sh /whatever/script/blah.sh >> /var/log/leoncleaner.log

答案2

尝试运行echo PATH=$PATH > path.tmp。然后将 path.tmp 的内容添加到脚本的开头。这将以交互方式向脚本提供相同的路径。

您可能希望在脚本开头添加一个爆炸路径。类似这样的操作#!/bin/bash 应该可行。

还要确保您的脚本是可执行的。运行命令chmod +x m.sh。然后测试您的脚本是否可以作为运行./m.sh

脚本的输出应通过邮件发送给正在运行的 crontab 的用户 ID。如果是 root 用户,请确保您有一个用于监控邮件的用户 ID 的别名/etc/aliases。通常,除非出现故障,否则您不需要 cron 脚本的输出。如果需要,请将输出重定向到日志。

相关内容