【问题标题】:writing logs using crontab使用 crontab 写日志
【发布时间】:2015-02-24 15:41:00
【问题描述】:

我正在使用 crontab 自动启动程序,在 cronatb 中使用以下命令

@reboot sudo python /home/Desktop/Appllication.py

是否可以通过在上述命令中附加一些内容来写入所有日志(错误和其他内容),以便 cron 将所有错误/任何相关事件写入日志?

更新: 当使用 print 命令单独运行时,代码会在 python 空闲终端中打印值。如何使打印在终端上的这些数据写入日志文件。例如,如果我的代码类似于 print "food morning" ,我如何将其写入日志文件而不是在终端上打印。

测试代码:

import time
while(1):
    print "testing"
    time.sleep(5)

【问题讨论】:

    标签: python linux logging debian crontab


    【解决方案1】:

    如果/home/Desktop/Application.py 将错误日志打印到 STDOUT,您可以像这样简单地重定向脚本的输出

    python /home/Desktop/Application.py >> /home/my_application_log.txt
    

    通过几个有用的链接扩展答案。

    Redirect all output to file 是一个非常好的 SO 线程。您可以使用您的测试代码作为输出生成器尝试那里的代码 sn-p。

    另外,python 带有一个出色的日志记录模块。如果您想整合一个强大的日志记录系统,我强烈建议您研究一下:python logging

    【讨论】:

    • 当使用 print 命令单独运行时,代码会在 python 空闲终端中打印值。如何使打印在终端上的这些数据写入日志文件。例如,如果我的代码类似于 print "food morning" ,我如何将其写入日志文件而不是在终端上打印。
    • 我和@Digisec 展示的代码就是为了做到这一点。您确定没有生成日志文件吗?
    【解决方案2】:

    您实际上在其中包含了一个 sudo。 sudo 需要密码,您必须在 sudoers 中添加一个配置项才能无密码地运行该脚本。您的另一个选择是将其添加到根 cron。使用@Haleemur 的重定向命令将输出重定向到日志。我实际上建议使用以下内容,以防万一它失败并输出到 STDERR

    @reboot python /home/Desktop/Application.py >> /home/Desktop/log_file 2>&1
    

    更新:

    尝试从终端运行以下命令

    python /home/Desktop/Application.py >> /home/Desktop/log_file 2>&1
    

    如果它在命令行中工作,它没有理由不应该在 cron 中工作。

    【讨论】:

    • 谢谢你。我做了 sudo crontab -e 并添加了 urs 的命令,然后重新启动它。仍然没有任何内容写入日志文件。我在上面的原始帖子中添加了上面的测试脚本。如果我故意在代码中出错,那么只有将错误写入日志文件。但是,实际输出(python 代码的打印语句)没有被写入。
    • 您确定脚本正在运行吗?在我看来,脚本根本没有运行。我们可以看到代码的 sn-ps 吗?这种行为很奇怪。
    • 所以,我发现了问题。我的脚本在一个while循环中连续运行。出于某种原因,它在程序执行结束时写入文件。因此,如果它在一个 while 循环中,我们看不到任何写入文本文件日志的内容。有什么解决办法吗?
    • 从脚本中写入文件。
    • @bobdxcool:如果它直到执行结束才写入,python 缓冲它的输出并在退出时刷新缓冲区。为了防止这种情况,您可以使用参数 -u 输出无缓冲:python -u scriptname.py
    猜你喜欢
    • 2017-11-16
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 2023-01-14
    • 1970-01-01
    • 2019-11-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多