如何使用 Crontab 将Python脚本安排为 Cron 作业
在本文中,我们将讨论如何使用 crontab 调度Python脚本。
Cron 作业实用程序是类 Unix 操作系统中基于时间的作业调度程序。 Cron 允许 Linux 和 Unix 用户在给定的时间和日期运行命令或脚本。可以安排脚本定期执行。 crontab 是您要定期运行的命令列表,也是用于管理该列表的命令的名称。 cron 是系统进程,它会根据设定的时间表自动为您执行任务。
入门
下面是一个简单的Python脚本,它发送通知消息以提醒用户喝水。我们将安排此脚本每 2 小时发送一次通知。 (该脚本仅针对基于 Linux 的系统进行了测试,但调度过程将与任何脚本相似)
Python3
#!/usr/bin/env python3
#-*- coding: utf-8 -*-
import subprocess
def sendmessage(message="drink water"):
subprocess.Popen(['notify-send', message])
return
if __name__ == '__main__':
sendmessage()
注意: #!/usr/bin/python3(指定脚本解释器的路径)是让脚本可执行的必要条件。假设我们已将此脚本保存为主目录下的 my_script.py,我们可以通过在终端中输入以下命令使其可执行:
$ sudo chmod +x my_script.py
我们可以测试我们的脚本是否正常工作:
./my_script.py
这将发送一条通知作为消息“喝水”。
crontab 调度表达式有以下几个部分:
要调度我们的脚本执行,我们需要在 crontab 文件中输入 crontab 调度表达式。为此,只需在终端中输入以下内容:
crontab -e
系统可能会提示您选择编辑器,选择 nano 并将以下行附加到打开的 crontab 文件的末尾:
* */2 * * * /home/$(USER)/my_script.py
其中 $(USER) 可以替换为您的用户名。保存更改并退出。这将安排我们的Python脚本每 2 小时运行一次。
验证文件是否已成功保存:
它将列出所有计划的作业。
crontab -l
在安排 cron 作业之前,需要记住以下几点:
- 所有 cron 作业都在本地时区进行调度,调度作业所在的系统在该时区中运行。如果作业被安排在有跨国人员使用的服务器上,这可能会很麻烦。特别是如果用户也属于遵循夏令时惯例的国家/地区。
- 如果我们希望看到它们,所有 cron 作业都在它们自己的独立的、匿名的 shell 会话中运行,并且它们到 STDOUT(如果有)的输出必须被定向到一个文件。
- 所有 cron 作业都在为其安排的用户的上下文中运行。因此,为脚本和输出文件提供绝对路径以避免任何混淆和混乱始终是一种很好的做法。