Home > Article > Backend Development > Cron job management based on Python
In this tutorial, you will learn the importance of cron jobs and why you need them. You'll see python-crontab
, a Python module that interacts with crontab
. You will learn how to operate cron jobs from a Python program using the python-crontab
module.
During system administration, background jobs need to be run on the server to perform routine tasks. Cron is a system process used to perform background tasks on a regular basis. Cron requires a file called crontab
that contains a list of tasks to be executed at a specific time. All these jobs are executed in the background at specified times.
To view the cron jobs running on your system, navigate to the terminal and enter:
crontab -l
The above command displays the job list in the crontab
file. To add a new cron job to crontab
, enter:
crontab -e
The above command will display the crontab
file where you can schedule jobs. Suppose you have a file called hello.py
like this:
print("Hello World")
Now, to schedule a cron job to execute the above script for output to another file, you need to add the following lines of code:
50 19 * * * python hello.py >> a.txt
The above line of code schedules the execution of the file and outputs the output to a file named a.txt
. The number preceding the command to be executed defines when the job will be executed. The timing syntax has five parts:
The asterisk (*) in the timing syntax means it will run every time.
python-crontab
is a Python module that provides access to cron jobs and enables us to manipulate crontab
files from a Python program. It automates the process of manually modifying crontab
files. To start using python-crontab
, you need to install the module using pip:
pip install python-crontab
After installing python-crontab
, import it into the Python program.
from crontab import CronTab
Let's use the python-crontab
module to write our first cron job. Create a Python program named writeDate.py
. In writeDate.py
, add code to print the current date and time to a file. This is what writeDate.py
looks like:
import datetime with open('dateInfo.txt','a') as outFile: outFile.write('\n' + str(datetime.datetime.now()))
Save the above changes.
Let’s create another Python program that will schedule the writeDate.py
Python program to run every minute. Create a file named scheduleCron.py
.
Import the CronTab
module into the scheduleCron.py
program.
from crontab import CronTab
Using the CronTab
module, we access the system crontab
.
my_cron = CronTab(user='your username')
The above command creates the user's access rights to the system crontab
. Let's loop through the cron jobs and you should be able to see any cron job that was manually created for a specific username.
for job in my_cron: print(job)
Save the changes and try executing scheduleCron.py
, you should have a list of cron jobs for the specific user (if any). You should be able to see something similar when executing the above program:
50 19 * * * python hello.py >> a.txt # at 5 a.m every week with:
Let's continue by creating a new cron job using the CronTab
module. You can use the new method to create a new cron and specify the command to execute.
job = my_cron.new(command='python /home/jay/writeDate.py')
As you can see in the above line of code, I have specified the command to be executed when the cron job executes. Once you have a new cron job, you need to schedule the cron job.
Let's schedule a cron job to run every minute. Therefore, at one-minute intervals, the current date and time will be appended to the dateInfo.txt
file. To schedule the job to execute every minute, add the following lines of code:
job.minute.every(1)
After scheduling the job, you need to write the job to the cron tab.
my_cron.write()
This is scheduleCron.py
file:
from crontab import CronTab my_cron = CronTab(user='vaati') job = my_cron.new(command='python3 /home/Desktop/vaati/writeDate.py') job.minute.every(1) my_cron.write()
Save the above changes and execute the Python program.
python scheduleCron.py
After execution, use the following command to check the crontab
file:
crontab -l
The above command should show the newly added cron job.
* * * * * python3 home/vaati/Desktop/writeDate.py
Wait a moment and check your home directory, you should be able to see the dateInfo.txt
file, which contains the current date and time. The file will be updated every minute and the current date and time will be appended to the existing content.
要更新现有的 cron 作业,您需要使用命令或使用 ID 来查找 cron 作业。使用 python-crontab
创建 cron 作业时,可以以注释的形式为 cron 作业设置 Id。以下是如何创建带有注释的 cron 作业:
job = my_cron.new(command='python3 home/vaati/Desktop/writeDate.py', comment='dateinfo')
如上面的代码行所示,已使用注释 dateinfo
创建了一个新的 cron 作业。上述注释可用于查找 cron 作业。
您需要做的是迭代 crontab
中的所有作业,并使用注释 dateinfo
检查作业。这是代码:
my_cron = CronTab(user='vaati') for job in my_cron: print(job)
使用 job.comment
属性检查每个作业的评论。
my_cron = CronTab(user='vaati') for job in my_cron: if job.comment == 'dateinfo': print(job)
完成作业后,重新安排 cron 作业并写入 cron。完整代码如下:
from crontab import CronTab my_cron = CronTab(user='vaati') for job in my_cron: if job.comment == 'dateinfo': job.hour.every(10) my_cron.write() print('Cron job modified successfully')
保存上述更改并执行 scheduleCron.py
文件。使用以下命令列出 crontab
文件中的项目:
crontab -l
您应该能够看到带有更新的计划时间的 cron 作业。
* */10 * * * python3 /home/Desktop/vaati/writeDate.py # dateinfo
python-crontab
提供了从 crontab
中清除或删除作业的方法。您可以根据计划、注释或命令从 crontab
中删除 cron 作业。
假设您想通过 crontab
中的注释 dateinfo
清除作业。代码是:
from crontab import CronTab my_cron = CronTab(user='vaati') for job in my_cron if job.comment == 'dateinfo': my_cron.remove(job) my_cron.write()
同样,要根据评论删除作业,可以直接调用 my_cron
上的 remove
方法,无需任何迭代。这是代码:
my_cron.remove(comment='dateinfo')
要删除 crontab
中的所有作业,可以调用 remove_all
方法。
my_cron.remove_all()
完成更改后,使用以下命令将其写回 cron:
my_cron.write()
要检查使用 python-crontab
执行作业的次数,您可以使用 Frequency
方法。获得作业后,您可以调用名为 Frequency
的方法,该方法将返回该作业在一年内执行的次数。
from crontab import CronTab my_cron = CronTab(user='vaati') for job in my_cron: print(job.frequency())
要查看一小时内作业执行的次数,可以使用方法 Frequency_per_hour
。
my_cron = CronTab(user='vaati') for job in my_cron: print(job.frequency_per_hour())
要查看一天中的作业频率,可以使用方法 Frequency_per_day
。
python-crontab
提供了检查特定作业的时间表的功能。为此,您需要在系统上安装 croniter
模块。使用 pip 安装 croniter
:
pip install croniter
安装 croniter
后,调用作业上的调度方法来获取作业调度。
import datetime sch = job.schedule(date_from=datetime.datetime.now())
现在您可以使用 get_next
方法获取下一个作业计划。
print(sch.get_next())
完整代码如下:
import datetime from crontab import CronTab my_crons = CronTab(user='vaati') for job in my_crons: sch = job.schedule(date_from=datetime.datetime.now()) print(sch.get_next())
您甚至可以使用 get_prev
方法获取之前的时间表。
在本教程中,您了解了如何开始使用 python-crontab
从 Python 程序访问系统 crontab
。使用 python-crontab
,您可以自动执行创建、更新和调度 cron 作业的手动过程。
您是否使用过 python-crontab
或任何其他库来访问系统 crontab
?我很想听听你的想法。请在论坛上告诉我们您的建议。
无论您是刚刚入门还是希望学习新技能的经验丰富的程序员,都可以通过我们完整的 Python 教程指南学习 Python。
The above is the detailed content of Cron job management based on Python. For more information, please follow other related articles on the PHP Chinese website!