2017-04-18 64 views
0

我是Unix系统的新手。我想在crontab中安排一个python作业,如下所示;Crontab作业时间表

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

检查你的环境,看看有没有设置你使用的东西。例如,如果您在您的env中设置了PYTHONPATH,那么在crontab运行时将不可用。 – gbtimmon

+0

同时检查你的crontab。 '* * * * * date >>/tmp/ping'是确保crontab按预期运行的好方法。 – gbtimmon

+0

通过'sudo service cron status'和'grep CRON/var/log/syslog'来查看你的cron是否正在运行查看来自syslog的日志 –

回答

0

一些事情要检查调试:

1.)确保crontab正在运行。添加

* * * * * date >> /tmp/ping 

并检查该文件以确保守护程序按预期工作。

2.)检查运行脚本中的错误。现在你只捕获stdout。捕获标准错误,看看你能赶上一个错误消息

* * * * * python script.py > script.log 2>&1 

添加2>&1是文件描述符2(标准错误)重定向到文件描述符1(标准输出),它被发送到日志文件,这意味着重定向都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 

,看看是否有任何可能需要的不是他们(并注意不同的环境)。如果你缺少的东西,你既可以

一)添加单个参数

* * * * * PYTHONPATH=/python/lib/path python python-script.py > python-script.log 

湾),或者单独的源代码完整包膜。

* * * * * . /home/user/.profile && python python-script.py > python-script.log 
+0

@http://stackoverflow.com/users/1158990/gbtimmon非常感谢选项b现在完美地工作。 –

+0

我用PYTHONPATH创建了一个.profile,并在crontab中做了类似的事情; * * * * * /path/to/.profile python-script.py >> python-script.log 2>&1 –

-1

假设你设置可以通过crontab cron的,

如果你不需要任何特殊的Python包从你的virtualenv

* * * * * python /path/to/file.py

运行它

* * * * * /path/to/env/bin/python /path/to/file.py

如果您需要帮助来设置cron间隔,请尝试https://crontab.guru