阿里云CentOS 7.6 crontab定时任务|定时执行python脚本

发表时间:2020-03-20

crontab命令格式:

* * * * * command
M H D m d command

M: 分(0-59) 
H:时(0-23)
D:天(1-31)
m: 月(1-12)
d: 周(0-6) 0为星期日


* 代表取值范围内的数字
/ 代表"每"
- 代表从某个数字到某个数字
, 代表离散的取值(取值的列表)

 

crontab脚本示例:

每天清晨 4:00:01,用python执行/opt/aa.py文件。

编辑定时任务:

#crontab -e 

加入:

0 4 * * * python /opt/aa.py

保存,退出即可。

■每分钟执行:

* * * * * date>>/opt/test.log

相当于

*/1 * * * * date>>/opt/test.log

注意,每分钟的意思是指,每分钟的第1秒开始执行。

■每4小时执行:

* */4 * * * date>>/opt/test.log

■每周日执行:

* * * * 0 date>>/opt/test.log

■每周六、周日执行:

* * * * 6,0 date>>/opt/test.log

■每小时的第5分钟执行:

5 * * * * date>>/opt/test.log



crontab脚本编辑

输入

crontab -e

按下 a 键进入到编辑模式

输入脚本:

0 */1 * * * /home/work/start-service.sh

同时按下 ctrl+c 退出编辑模式

按下 shift+: 输入 wq 退出 crontab


当我们编辑完定时任务过后,记得重载一遍crond

systemctl reload crond.service

启动、停止、重启服务↓

systemctl start crond.service

systemctl stop crond.service

systemctl restart crond.service

设置开机自启:

systemctl enable crond # 开机自启动



通过crontab -e编辑生成的定时任务,写在哪个文件中

一般设置crontab定时任务都是通过crontab -e来编辑生成的,那么就有个疑问,crontab -e编辑生成的内容,最终是写在哪个文件中的呢?

操作过程:

1.举例在oracle用户下,创建了如下的定时任务

[oracle@standby spool]$ crontab -l
*/1 * * * * /home/oracle/check_ps_if_exits.sh

备注:通过crontab -l就可以查看当前用户下的定时任务的设定。

2.通过在网上,找了该内容所在的具体的文件

/var/spool/cron目录下,具体的用户名文件中

3.使用oracle用户查看该文件

[oracle@standby spool]$ cd /var/spool/
You have new mail in /var/spool/mail/oracle
[oracle@standby spool]$ ls
anacron  cron  lpd  mail  plymouth  postfix  rhsm  up2date
[oracle@standby spool]$ cd cron/
-bash: cd: cron/: Permission denied

备注:发现权限是不够的,也就是普通过的用户无法进入到cron目录中。

4.使用root用户,查看该文件

[root@standby cron]# pwd
/var/spool/cron
[root@standby cron]# ls -l
total 4
-rw------- 1 oracle oinstall 46 Mar 12 20:28 oracle
[root@standby cron]# cat oracle 
*/1 * * * * /home/oracle/check_ps_if_exits.sh

 备注:通过root进入到cron目录中,查看oracle文件,与crontab -l输出的内容是一致的。

小结

  linux操作系统中,crontab -l对应的文件是/var/spool/cron目录下的具体的用户名文件。


今天用python写了处理文件的程序,但是因为快要下班了,所以想用crontab来完成。搜了一下,大部分都是执行的shell脚本,自己根据搜索的资料写了测试了几次,亲测能用,整理一下。

首先是python程序,就不贴源程序了,把测试crontab的python程序写出来吧。

crontest.py

#!/usr/bin/python
#encoding=utf-8
import os
outfileName = '/data5/outcid.txt'
outfile = open(outfileName, 'w')
outfile.write("This is crontab command test!")
 
outfile.close()


然后更改crontest.py的权限,使其可以执行。然后就是用编辑crontab命令了。如果用vi /etc/crontab命令的话,会列出root的已有任务列表,这是针对系统的服务。如果是想用当前用户执行,可以用命令crontab -e 来打开一个vi编辑自己的任务。

crontab -e

输入

*/2 * * * * python /data5/crontest.py >> /data5/crontest.py.log 2>&1

意思是每个两分钟就用python执行/data5目录下的crontest.py,将日志输出值crontest.py.log中,当然,程序crongtest.py中的输入到指定文件的数据是不会输入到该log文件中的,后面那个2>&1的意思是把错误的输出也输出到标准输出(2表示错误,2>表示错误输出,&表示等同于,1表示正确),因此如果运行出错也会把错误输出到之前定义的log中

以下为有用的参考资料:

分钟 小时 日期 月份 周 命令

举例:
每天8点30分运行命令/tmp/run.sh
30 8 * * * /tmp/run.sh
每两小时运行命令/tmp/run.sh
0 */2 * * * /tmp/run.sh
设置的时候用crontab -e来设置
设置好后可以用crontab -l来查看
设置好后不用重启crontab服务,马上生效
但至少间隔一分钟,也就是说9:50分设置9:51分运行的命令,很可能是不会生效的,至少要设置9:52分运行。 

你用哪个用户运行crontab -e,那么执行的时候就是以哪个用户身份执行

文章来源互联网,如有侵权,请联系管理员删除。邮箱:417803890@qq.com / QQ:417803890

微配音

Python Free

邮箱:417803890@qq.com
QQ:417803890

皖ICP备19001818号
© 2019 copyright www.pythonf.cn - All rights reserved

微信扫一扫关注公众号:

联系方式

Python Free