我是Unix系统的新手。我正在尝试在crontab中安排python作业,如下所示;
42 15 18 4 * absolute_path_where_python_is_install absolute_path_to_python_script > absolute_path_to_output_log_file
这没有任何作用:没有错误,没有输出 但是,当我手动运行下面的代码时,它按预期工作
absolute_path_where_python_is_install absolute_path_to_python_script > absolute_path_to_output_log_file
有人可以帮我识别我错过的东西吗?
提前致谢。
答案 0 :(得分:0)
要检查调试的几件事:
1。)确保crontab正在运行。添加
* * * * * date >> /tmp/ping
并检查该文件以确保守护程序按预期工作。
2.)检查运行中脚本的错误。现在你只捕获stdout。捕获stderr并查看是否可以捕获错误消息
* * * * * python script.py > script.log 2>&1
添加2>&1
是一个重定向,它将文件描述符2(stderr)重定向到正被发送到日志文件的文件描述符1(stdout),这意味着stdout和stderr将最终出现在日志文件中。
3。)验证env在运行时是否符合预期:
* * * * * env | sort > /tmp/env_in_cron
然后运行
env | sort > /tmp/env_at_runtime
sdiff /tmp/env_at_runtme /tmp/env_in_cron
并查看您可能需要的是否是他们的(并注意环境有多么不同)。如果你遗漏了什么,你可以
a。)添加单个参数
* * * * * PYTHONPATH=/python/lib/path python python-script.py > python-script.log
b。)或者只是获取完整的环境。
* * * * * . /home/user/.profile && python python-script.py > python-script.log
答案 1 :(得分:-1)
假设您通过crontab设置了cron,
如果您不需要任何特殊的python包
* * * * * python /path/to/file.py
从你的virtualenv
运行它 * * * * * /path/to/env/bin/python /path/to/file.py
如果您需要帮助来设置cron间隔,请尝试https://crontab.guru。