【问题标题】:crontab runs script with a python command but the python program crashescrontab 使用 python 命令运行脚本,但 python 程序崩溃
【发布时间】:2021-12-29 23:07:55
【问题描述】:

这是crontab -l 显示的内容:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

*/1 *   *   *   * /bin/bash  /home/azureuser/project/negev/restart.sh >> /home/azureuser/out.txt 2>&1

这是restart.sh文件的内容:

#!/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/azureuser/project/negev

variable=$(ps x aux | grep -i 'main.py' | wc -l)
if test $variable=='1'
then
    /home/azureuser/miniconda3/envs/negev/bin/python '/home/azureuser/project/negev/main.py'
fi

当我运行main.pyrestart.sh 时,一切都很棒。但是,当我检查 out.txt 文件时,我看到了这个错误:

Traceback (most recent call last):
  ...
    from logger import logger, logger_format
  File "/home/azureuser/project/negev/logger.py", line 8, in <module>
    log_path = config['LOGGER']['log_path']
  File "/home/azureuser/miniconda3/envs/negev/lib/python3.7/configparser.py", line 958, in __getitem__
    raise KeyError(key)
KeyError: 'LOGGER

配置文件在/home/azureuser/project/negev/user

我不明白为什么只有在使用crontab 时才会发生这种情况,而且我在任何地方都找不到解决方案。

编辑:问题与我在代码中使用相对路径而不是绝对路径有关。有没有办法在不改变我项目中每一个相对路径的情况下克服这个问题?

【问题讨论】:

  • 配置是否有代码所期望的LOGGER 键?
  • @jordanm 确实如此,因为如果我直接调用它,代码就会成功运行。
  • @jordanm 这个问题与我在代码中使用相对路径而不是绝对路径有关。有没有办法在不改变我项目中每一个相对路径的情况下克服这个问题?
  • 很难说,因为我看不到您在代码中使用路径的位置和方式。通常情况正好相反,您希望避免在代码库中使用绝对路径,因为这样可以更轻松地迁移到不同的系统
  • 您可以先将脚本cd 放到适当的目录中(但请检查cd 命令上的错误——如果失败,脚本的其余部分将在错误的目录中运行) .顺便说一句,test $variable=='1' 是错误的,您需要在运算符周围有空格,而==test 是非标准的,您可能无论如何都想要-eqps 列出 grep 命令也可能有问题; pgrep 会更好。

标签: python linux bash cron


【解决方案1】:

您可以尝试将os.chdir 添加到您的python 代码中吗?

import os

os.chdir('/home/azureuser/project/negev')

# or
# os.chdir('/path/to/your/project/folder')
# os.chdir(os.path.dirname(__file__))

【讨论】:

    猜你喜欢
    • 2020-09-09
    • 1970-01-01
    • 2020-11-04
    • 2021-09-10
    • 2015-10-05
    • 2017-12-16
    • 2011-09-21
    • 1970-01-01
    • 2011-10-03
    相关资源
    最近更新 更多