Cron 不会在 Ubuntu 上立即写入日志

Cron 不会在 Ubuntu 上立即写入日志

我通过 执行了一个 Python 脚本cron。该脚本从开头就包含许多打印语句(第一行是打印语句)。但是,即使脚本正在运行,也会创建日志文件,但该文件仍为空白。

这是我的 crontab:

00 14 * * * python DE.py >> DElog.log 2>&1

有人知道为什么吗?

答案1

耐心是一种美德。

首先,日志文件在脚本开始运行和生成输出之前就被创建了。

其次,在 Linux 上,当标准输出重定向到 TTY(终端窗口)以外的其他位置时,输出将默认完全缓冲,而不是行缓冲。

因为您还将标准错误重定向到 stdout(使用2>&1),所以不会将任何输出写入磁盘,直到:
- 您的脚本完成

- 输出超出默认缓冲区大小(4k?)。

您可以使用以下方式调整缓冲stdbuff并使错误和输出模式无缓冲:

stdbuf -o0 -e0 python DE.py >> DElog.log 2>&1

答案2

日志文件存在并且是空白的,因为它是由 shell 打开的,甚至在脚本运行之前。

看:

    $ rm log
rm: log: No such file or directory
    $ thatdoesnotexist > log
-bash: thatdoesnotexist: command not found
    $ ls log
log

因此你的脚本可能根本无法运行。

首先,对于 crontab,始终指定完整路径。因此,不要

python DE.py

放类似的东西(当然要调整路径)

python /usr/local/bin/DE.py

日志文件相同:指定其完整路径。

现在您没有指定这是哪个 crontab、哪个用户?您是如何输入这些行的?因为您需要确保运行此命令的用户具有足够的权限。它需要读取权限才能读取 python 文件并执行它,然后它需要对日志文件路径具有写入权限才能对其进行写入。

这些是您需要修复的第一步。

另外,传递提示:使用 bash shell,

 >> DElog.log 2>&1

可以简化为

&>> DElog.log

相关内容