我正在尝试使用 crontab 运行一个简单的 Python 脚本,但我无法让它工作。不过,当我不使用 Python 时,我可以在 crontab 中运行一个简单的程序。这是我的 Crontab 文件中有效的行:
* * * * * echo “cron test” >> /home/ftpuser/dev/mod_high_lows/hello.txt
我也可以直接从命令行运行这个 python 脚本 testit.py。这是我的 testit.py 文件,它输出一个 csv 文件。
#!/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 代码,它也不会运行(以防 Windows 在我的文件中创建隐藏字符)。
最佳答案
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)
关于python - 使用 Crontab 运行简单的 Python 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32031111/