使用Crontab运行简单的Python文件

时间:2015-08-16 01:44:26

标签: python linux crontab

我正在尝试使用crontab运行一个简单的Python脚本,但我无法让它工作。不使用Python时,我可以在crontab中运行一个简单的程序。以下是我在Crontab文件中运行的行:

* * * * * echo “cron test” >> /home/ftpuser/dev/mod_high_lows/hello.txt

我也可以直接从命令行运行这个python脚本testit.py。这是我输出csv文件的testit.py文件。

#!/usr/bin/env python

import f_file_handling
_data = [(12,15,17)]
f_file_handling.csv_out('my_file_test',_data)

上面的文件有我做的一个函数,但是我知道它有效,因为当我从命令行运行testit.py时它就像我期望的那样:

python testit.py

所以我让Crontab处理它自己和testit.py文件来处理它自己然后我尝试用Crontab运行testit.py文件。 我确实使用命令:

生成了testit.py文件的可执行文件
chmod +x testit.py 

我看到它的可执行文件,因为当我在正确的目录中时,我的linux命令窗口中的文件显示为绿色。 现在在我用来运行早期Crontab测试的同一个Crontab文件中,我添加了以下行:

* * * * * /home/ftpuser/dev/mod_high_lows/testit.py

是的,我想要每分钟执行一次,只是尝试运行最简单的测试,让Crontab和Python一起工作。

以下是我正在使用的内容:

  • Ubuntu 14.04.2 LTS(GNU / Linux 3.13.0-52-generic x86_64)

  • Python 2.7

以上是在我设置的linux服务器上。

你看我的testit.py文件顶部的shebang行,从我的研究中看这应该有用 至于我的testit.py python文件,我在windows机器上写了它,然后将它传送到服务器,但是当crontab和python不能一起工作时,我还使用Nano文本编辑器从Linux命令窗口编码文件,但是尝试通过Crontab运行testit.py文件时没有任何区别。因此,即使我直接在Linux服务器上编写testit.py代码也不会运行(以防万一窗口在我的文件中创建隐藏字符)。

3 个答案:

答案 0 :(得分:6)

  • cron在有限的环境中运行命令。只有少数环境变量 自动设定。它加载/etc/environment指定的环境 和/etc/security/pam_env.conf,但不是你的环境变量 可能已设置在.bashrc.profile

    设置crontab条目

    *   *    *    *    *   /usr/bin/env > /tmp/out
    

    查看实际设置的环境变量。 一旦你有/ tmp / out,就不要忘记删除crontab条目。

  • 运行Python脚本时,您可以使用一个重要的环境变量 可能需要设置的是PYTHONPATH。所以在你的crontab顶部添加一个 PYTHONPATH设置如:

    PYTHONPATH=/home/ftpuser/dev/mod_high_lows
    

    请务必添加包含f_file_handling模块的目录 Python将在运行语句

    时找到该模块
    import f_file_handling
    
  • 最后,默认情况下还要注意cron runs commands in your home directory。 然而,最好是明确的,并在脚本中指定文件时提供完整路径:

    f_file_handling.csv_out('/path/to/my_file_test',_data)
    

答案 1 :(得分:0)

我不确定这是否会有所帮助,但我总是成功地通过将此行添加到crontab文件的末尾来成功地从cron中运行python脚本:

@reboot python /home/ftpuser/dev/mod_high_lows/testit.py &

行末必须&。如果这是您需要的,并且您希望此脚本每分钟执行一次,您可以将整个脚本放在一个循环中,然后在每个循环的迭代结束时进行一分钟的休眠。

你可能还需要在python之前加一个sudo,虽然crontabs应该以root身份运行,所以这可能不会是必要的。这个方法适用于在我的Raspberry Pi启动时运行脚本。

答案 2 :(得分:0)

有一件事总能让我:你必须在crontab文件的末尾留一个空行。 Cron不会运行crontab的最后一行!