使用 Crontab 到 运行 简单 Python 文件
using Crontab to run simple Python file
我正在尝试使用 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 命令 window 中显示为绿色。
现在,在我用于 运行 早期 Crontab 测试的同一个 Crontab 文件中,我添加了以下行:
* * * * * /home/ftpuser/dev/mod_high_lows/testit.py
是的,我想每分钟都执行一次,只是想 运行 最简单的测试,让 Crontab 和 Python 一起工作。
这是我正在使用的:
Ubuntu 14.04.2 LTS(GNU/Linux 3.13.0-52-通用 x86_64)
Python 2.7
以上是在我设置的 linux 服务器上。
你在我的 testit.py 文件的顶部看到了 shebang 行,根据我的研究,这应该有效。
至于我的 testit.py python 文件,我是写在 windows 机器上然后传到服务器上的,但是当 crontab 和 python 没有一起工作时我也使用 Nano 文本编辑器从 Linux 命令 window 对文件进行编码,但这在尝试通过 Crontab 运行 testit.py 文件时没有任何区别。所以它不会 运行 即使我直接在 Linux 服务器上编写 testit.py 代码(以防万一 windows 在我的文件中创建隐藏字符)。
我不确定这是否有帮助,但我总是通过将此行添加到 crontab 文件的末尾,成功地从 cron 成功获取 python 脚本到 运行 :
@reboot python /home/ftpuser/dev/mod_high_lows/testit.py &
行尾必须有&
。如果这是您所需要的,并且您希望此脚本每分钟执行一次,则可以将整个脚本放入一个循环中,然后在每个循环迭代结束时休眠一分钟。
您可能还需要在 python 之前放置一个 sudo
,尽管 crontabs 无论如何都应该 运行 作为 root,所以这可能不是必需的。不过,此方法对我的 Raspberry Pi 启动时的 运行ning 脚本有效。
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)
有一件事总是让我很困惑:你必须在 crontab 文件的末尾留一个空行。 cron不会运行crontab的最后一行!
我正在尝试使用 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 命令 window 中显示为绿色。 现在,在我用于 运行 早期 Crontab 测试的同一个 Crontab 文件中,我添加了以下行:
* * * * * /home/ftpuser/dev/mod_high_lows/testit.py
是的,我想每分钟都执行一次,只是想 运行 最简单的测试,让 Crontab 和 Python 一起工作。
这是我正在使用的:
Ubuntu 14.04.2 LTS(GNU/Linux 3.13.0-52-通用 x86_64)
Python 2.7
以上是在我设置的 linux 服务器上。
你在我的 testit.py 文件的顶部看到了 shebang 行,根据我的研究,这应该有效。
至于我的 testit.py python 文件,我是写在 windows 机器上然后传到服务器上的,但是当 crontab 和 python 没有一起工作时我也使用 Nano 文本编辑器从 Linux 命令 window 对文件进行编码,但这在尝试通过 Crontab 运行 testit.py 文件时没有任何区别。所以它不会 运行 即使我直接在 Linux 服务器上编写 testit.py 代码(以防万一 windows 在我的文件中创建隐藏字符)。
我不确定这是否有帮助,但我总是通过将此行添加到 crontab 文件的末尾,成功地从 cron 成功获取 python 脚本到 运行 :
@reboot python /home/ftpuser/dev/mod_high_lows/testit.py &
行尾必须有&
。如果这是您所需要的,并且您希望此脚本每分钟执行一次,则可以将整个脚本放入一个循环中,然后在每个循环迭代结束时休眠一分钟。
您可能还需要在 python 之前放置一个 sudo
,尽管 crontabs 无论如何都应该 运行 作为 root,所以这可能不是必需的。不过,此方法对我的 Raspberry Pi 启动时的 运行ning 脚本有效。
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)
有一件事总是让我很困惑:你必须在 crontab 文件的末尾留一个空行。 cron不会运行crontab的最后一行!