一、前言
本文将介绍ubuntu系统下如何定时执行shell脚本、python脚本,ubuntu系统有一个定时任务的管理器crontab,我们只需要编辑定时任务,然后重启定时任务服务就好了。
二、工具:crontab
a、编辑定时任务:
crontab -e
b、参数定义:
- -u 指定用户,
- -l 列出用户任务计划,
- -r 删除用户任务,
- -e 编辑用户任务
c、英文介绍:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
d、中文解释:
格式:
m h dom mon dow command
以上为缩写,这里提供全拼对照:
minute (m), hour (h), day of month (dom), month (mon), day of week (dow)
含义如下:
- m 每个小时的第几分钟执行该任务
- h 每天的第几个小时执行该任务
- dom 每月的第几天执行该任务
- mon 每年的第几个月执行该任务
- dow 每周的第几天执行该任务 - command 指定要执行的程序
分 小时 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command
其他:
- 其中星期中0表示周日。
- * 代表任何时间,比如第一个分钟,用 * 就代表每一小时的每一分钟都执行
- - 表示区间,比如1-3
- , 如果区间不连续,可以用,例如1,3,6 编辑完成后wq 保存退出
记住几个特殊符号的含义:
- "*"代表取值范围内的数字,
- "/"代表"每",
- "-"代表从某个数字到某个数字,
- ","分开几个离散的数字
三、方法使用:
1、简易方法:
a、创建脚本文件test.py,在文件开头需要加上下面一行
#!/home/qq/anaconda3/bin/python
上面这行的作用是说明使用那个解释器来执行该文件,如果不知道python解释器在哪,可以使用命令which python来查看
b、给该文件添加可执行的权限
chmod +x test.py
c、添加新一行
输入命令,修改配置
crontab -e
格式为:分 时 日 月 星期几 [命令]
*号表示every
## Output of the crontab jobs (including errors) is sent through# email to the user the crontab file belongs to (unless redirected).## For example, you can run a backup of all your user accounts# at 5 a.m every week with:# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/## For more information see the manual pages of crontab(5) and cron(8)## m h dom mon dow command59 23 * * * /home/qq/anaconda3/bin/python /home/qq/test.py
注意,一定要用绝对路径。否则可能会执行失败。
这个编辑器比较神奇,ctrl+x离开,会提示是否保存,按y确定即可。
离开后,
crontab -l
查看是否已写入命令。
2、更本质的方法 vim /etc/crontab
这个方法的神奇之处在于,你甚至可以设置执行该命令的user。
如下文我使用qq来执行,也可以用root之类的。
# /etc/crontab: system-wide crontab# Unlike any other crontab you don't have to run the `crontab'# command to install the new version when you edit this file# and files in /etc/cron.d. These files also have username fields,# that none of the other crontabs do.SHELL=/bin/shPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin# m h dom mon dow user command59 23 * * * qq /home/qq/anaconda3/bin/python /home/qq/test.py
注意,一定要用绝对路径。否则可能会执行失败。
然后使用: wq! 保存退出。
四、重启cron服务
sudo service cron restart
五、查看建立成功的定时任务:
crontab -l
可以看到当前用户下的定时任务
六、删除定时任务:
crontab -r
回车,再次在命令行输入:
crontab -l
,提示:“no crontab for admin”