【问题标题】:Script run from crontab leaves an empty file从 crontab 运行的脚本会留下一个空文件
【发布时间】:2015-10-30 03:36:59
【问题描述】:

我尝试在我的 Linux 系统上运行 crontab 中的脚本,该脚本留下了一个空文件。当我运行在终端上登录的脚本时,它工作正常。

Cron 行:

@reboot sleep 1m; /bin/bash /root/start_reader_services

脚本“start_reader_services”调用Python脚本如下:

/root/java/tag_output >> $TAGS_PATH/tags_$DATE_FILE.log

tag_output 基本上打印出一系列 ID。当我将标准输出发送到我的串行端口(tag_output > /dev/ttyO0)时,使用相同的机制工作,但现在,从 cron 将其写入文件,文件已创建,但为空。

正如我所提到的,在命令行上运行 start_reader_services 或任何部分,它都能按预期工作。

已完成: - 将 bash 设置为 cron shell - 在 cron 上设置 java 环境

根据要求:

ls -l /root/java/tag_output
-rwxr-xr-x 1 root root 1981 Aug  6 12:06 /root/java/tag_output

标签输出的第一行:

#!/usr/bin/python

有什么帮助吗?

【问题讨论】:

  • tag_output 是 Python 脚本还是 Java 程序?无论如何,您可能不需要 [python] 标签,因为您不是在询问 Python,因为您发布的所有代码都是 shell/crontab。
  • 这可能会有所帮助..unix.stackexchange.com/questions/52330/…
  • 将 /root/java/tag_output 的第一行和 ls -l /root/java/tag_output 的输出添加到您的问题中。
  • tag_output 实际上是我编写的 Python 脚本,它执行一些操作并调用硬件供应商提供的 Java 应用程序。它基本上打印出从供应商应用程序读回的标签。
  • 将您的建议添加到我的问题中,谢谢

标签: python linux bash shell cron


【解决方案1】:

tag_output 是否有可能写入 stderr 而不是 stdout?也尝试重定向 stderr

/root/java/tag_output >> $TAGS_PATH/tags_$DATE_FILE.log 2>&1

顺便说一句,您可能还想在 shell 变量扩展中引用和使用大括号;这使它更易于阅读,并且可能更安全一些:

/root/java/tag_output >> "${TAGS_PATH}/tags_${DATE_FILE}.log" 2>&1

【讨论】:

  • 我不认为 tag_output 正在写入 stderr,因为它在 Python 中使用“print”,据我所知,它会写入 stdout。无论如何都会尝试。
【解决方案2】:

在使用 crontab python 初始化和更新 crontab 之后和发出之前

cron.write(), give the command, cron.__reduce__()[2]['lines'] = filter(None, cron.__reduce__()[2]['lines'])

这样做会删除 Linux crontab 中打印的空行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-12
    • 2011-03-21
    • 1970-01-01
    • 2014-04-02
    • 2017-11-20
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多