【问题标题】:What is preventing my cron job from running是什么阻止我的 cron 作业运行
【发布时间】:2014-09-08 00:34:20
【问题描述】:

我在根 crontab 文件中使用 sudo crontab -e 创建了一个 cron 作业列表(见下文)。当我在命令行上单独运行命令时,它们工作正常,但是没有一个作业是由 cron 运行的。任何帮助,将不胜感激。我需要在 crontab 文件中添加其他内容吗?

48 * * * * sudo gzip -k /calcservergc.log.*

49 * * * * 用于 /calcservergc.log.*.gz 中的文件;做 sudo mv $file $(hostname).${file:1};完成

50 * * * * sudo rm $(主机名)..log..gz

【问题讨论】:

    标签: linux unix cron crontab


    【解决方案1】:

    须藤

    sudo 命令可能无法在 crontab 中运行。通常,您需要密码才能运行 sudo,但在 cron 作业中运行时,可能有一种方法可以让它在没有密码的情况下运行。但是不建议尝试这样做。

    cron

    您需要以有权执行您需要完成的操作的用户身份运行 cron。 Cron 使用特定路径的简短列表运行。默认情况下,该列表非常短。在 linux 机器上,我使用的路径是 /sbin:/usr/sbin:/bin:/usr/bin

    此外,路径需要更具体。 Cron 不会以普通用户身份运行,因此您必须更具体地了解这些命令的路径和输出。

    例如,在第一个命令中,gzip 文件将放在哪里?

    logrotate

    看起来您正在尝试压缩日志文件,然后移动日志文件,然后删除旧的日志文件 - 这正是 logrotate 所做的。值得安装。 Logrotate 解决了运行此命令时打开日志文件等问题 - 通常,打开日志文件的进程即使重命名也不会丢失文件句柄,因此即使在移动后日志也会继续写入。它还处理保存最近日志文件的存档问题,如 syslog.1.gz、syslog.2.gz、syslog.x.gz 或您有存储空间或希望为后代保留的尽可能多的文件。

    总结

    • 不要在 cron 中使用 sudo
    • 在 cron 中运行命令时指定路径
    • 使用 logrotate 在您的问题中完成此特定任务

    【讨论】:

    • 那么我可以删除根 crontab 中的 sudo 命令吗?
    • 它比删除sudo 命令更深入。我希望我的答案更具体。
    【解决方案2】:

    我没有50分的声​​望,所以无法评论你的问题,所以我会尽量一口气说出来。

    我检测到您的 3 个命令可能存在问题,每个命令都在一分钟内调用。假设第一个操作需要超过一分钟才能运行(不应该发生,但理论上可以),您的第二个调用将不起作用,或者最糟糕的是,它可能对一半的数据起作用)。你不想浪费时间,比如说,在你的命令之间延迟 5 分钟,那会浪费时间。

    您可以做的是创建一个 shell 脚本,在其中放置 3 个命令。这样,它将防止您的操作“崩溃”。因此,只需将您的 3 个命令放在脚本 shell 中,它们就会一个接一个地执行。

    然后把你的文件放在像 /bin 这样的地方(你也可以用 ln -s 创建一个符号链接)并用 cron 调用你的脚本。 (注意脚本外壳中的路径)

    现在,对于 sudo 问题...好吧,即使你把它放在 shell 脚本中,你仍然需要传递你的 sudo 密码,并且 cron 在后台运行,所以你赢了'无法输入您的密码。

    您可以尝试两种解决方案。更改存储文件所在文件夹的权限(通过对文件夹使用 chmod -r 777 或 chmod 755)或将文件移动/复制到您有权读取和写入的目录中。

    【讨论】:

    • 这些命令实际上相隔 1 分钟,但无论如何,您提到的同样的问题也适用。处理此问题的最佳方法是使用 logrotate 之类的东西。
    • @spig 谢谢,当我发布答案时已经很晚了,忘记了分钟、小时、月中的某天、月、周中的某天。我确定了答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多