【问题标题】:Cron script doesn't work unless called by sh command除非由 sh 命令调用,否则 Cron 脚本不起作用
【发布时间】:2021-12-10 10:48:47
【问题描述】:

我有一个脚本保存在名为 file.sh 的文件中 通过命令执行

chmod +x file.sh

文件.sh

#!/bin/sh
find /var/log/*.gz  -printf "%T@ %Tc %p\n"|sort -n|tail -n +6|sudo xargs rm|echo"test"|wall

我正在尝试通过 cron 作业执行它。

Crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
* * * * * root /etc/file.sh

cron 作业每分钟启动一次脚本,我在终端收到回声。

但是 xargs rm 不起作用。我知道为什么。

当我执行命令 sudo sh file.sh 时,正常,文件被删除。

请帮我找出脚本在 cron-job 中不起作用的原因。 很奇怪。

谢谢!

【问题讨论】:

    标签: linux bash shell cron


    【解决方案1】:

    问题在于您的printf 声明...我相当肯定您还应该在root 的邮件中看到来自rm 的错误消息,大意是: 1634986839.0000000000 Sun 24 Oct 2021 12:00:39 AM UTC /var/log/syslog.2.gz 不存在。

    【讨论】:

    • 是的,会发生错误,但是,当我在 sudo sh 中运行它时,它仍然可以工作。
    • 你意识到一旦 *gz 文件消失了,第二次就不能工作了吗?
    • 是的,我愿意。这是删除最旧日志文件的脚本。
    • @GrafikKrystian 您的命令基本上是输出所有这些元数据(因为您使用的是 -printf %T@ %Tc)。在将其输送到 sudo xargs rm 之前将其过滤掉
    • @GrafikKrystian - 那么您如何向我们展示 cron-job 运行的邮件输出呢?将其添加到您的问题中...
    猜你喜欢
    • 2012-12-31
    • 2014-04-18
    • 2014-05-23
    • 2013-10-12
    • 2021-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    相关资源
    最近更新 更多