Linux/Window之定时任务脚本编写(crontab/crond)
1 Windows 定时任务软件
Win 10
compmgmt.msc
[Win+R] > 任务计划程序 > 任务计划程序库 > 创建基本任务
2 Linux 定时任务软件
实现linux定时任务主要可以通过cron、anacron、at三种,而使用最多的是cron任务。
CRON定时任务软件
概念
- [词义]cron一词来源于希腊语chronos(χρόνος),原意特指:时间。
- [功能]常见于Unix和类Unix的操作系统之中,通常被内置于操作系统中。用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。通常,crontab储存的指令被守护进程激活,crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。
- [Shell服务]cron服务提供cron、crontab命令(crontab,即 cron table之缩写)来设定cron服务。
- [推荐:绝对路径]脚本中推荐使用绝对路径,无论是shell脚本还是python脚本,里面所有的路径最好都是绝对路径!!!形如:echo "hello world" >> /root/jack/cron/sh-log.txt
- [辨析/核心命令]
cron
是服务名称,crond
是后台进程,crontab
则是定制好的计划任务表
cron的安装与服务管理
Ubuntu Linux
- 检查Cronta工具是否安装
crontab -l
- 安装与查看
shell> sudo apt-get install cron #安装,Ubuntu等Linux系统默认会按照cron服务
shell> sudo service cron status # 查看cron状态
- 服务管理
启动: service cron start
或: /etc/init.d/cron start
重启: service cron restart
或: /etc/init.d/cron restart
停止: service cron stop
运行状态: service cron status
查询cron可用的命令: service cron
- 重新载入配置
# service cron reload
* Reloading configuration files for periodic command scheduler cron
CENTOS Linux
【补充】CentOS安装/操纵crontab
- 安装
yum -y install vixie-cron
yum -y install crontabs
- 服务管理
systemctl start crond
systemctl stop crond
systemctl restart crond
systemctl reload crond
systemctl status crond
systemctl enable/disable crond.service (启用/禁用 开机运行)
crontab任务配置基本格式
crontab中的每一行代表一个定期执行的任务,分为6个部分。前5个部分表示何时执行命令,最后一个部分表示执行的shell命令。
edited file> # minute hour day-of-month month day-of-week commands
edited file> * * * * * command
其各项字段对应的合法值:00-59 00-23 01-31 01-12 0-6 (0 is sunday)
定时任务的使用与管理
创建定时任务
cmd shell> crontab -e
edited file> # minute hour day-of-month month day-of-week commands
edited file> */1 * * * * echo "Have a break now." >> /tmp/test.txt # 每隔1分钟,执行bash shell命令"echo "Have a break now." >> /tmp/test.txt"
(注:管道符>>为在原文基础上追加,>为覆盖原文)
edited file> 3,15 * * * * command # 每小时的第3和第15分钟执行command
edited file> 3,15 8-11 * * * command # 在每天上午8点到11点的第3和第15分钟执行command
edited file> 6,10 * 2 * * # 每个月2号,每小时的6分和10分执行一次任务
edited file> */3,*/5 * * * * # 每隔3分钟或5分钟执行一次任务,比如10:03,10:05,10:06
[每1小时重启smb]
* */1 * * * /etc/init.d/smb restart
[从0点开始,每1小时重启smb]
* 0/1 * * * /etc/init.d/smb restart
[每天晚上的21:30重启apache]
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
[每隔两天的上午8点到11点的第3和第15分钟执行]
3,15 8-11 */2 * * myCommand
[每周一上午8点到11点的第3和第15分钟执行]
3,15 8-11 * * 1 myCommand
[每月1、10、22日的4 : 45重启smb]
45 4 1,10,22 * * /etc/init.d/smb restart
查看定时任务
- crontab命令
- -u //设定某用户的cron服务,一般root用户在执行这个命令的时候需要此参数
- -l //显示某用户cron服务的配置信息
- -r //删除某用户的cron服务
- -e //编辑某用户的cron服务的配置信息
- -ir //删除 crontab 文件前提醒用户
crontab -u root -l ## 用户(root)查看自己的cron服务配置信息
- 查看指定用户的crontab任务
[root@sdc01 ~]# crontab -l -u root
0 */1 * * * command1
0 */2 * * * command2
查看定时任务的执行记录
- 方法1
如下这两个命令都是在系统日志文件中搜索关键字 "CRON",并显示与其相关的日志信息。
# grep CRON /var/log/syslog
# 或 grep CRON /var/log/cron
...
Apr 11 02:17:01 ecs-5c77 CRON[1765187]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 03:10:01 ecs-5c77 CRON[1798071]: (root) CMD (test -e /run/systemd/system || SERVICE_MODE=1 /sbin/e2scrub_all -A -r)
Apr 11 03:17:01 ecs-5c77 CRON[1801267]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 04:17:01 ecs-5c77 CRON[1828308]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 05:17:03 ecs-5c77 CRON[1851902]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 06:17:17 ecs-5c77 CRON[1880352]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 06:26:29 ecs-5c77 CRON[1885252]: (root) CMD (test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ))
Apr 11 07:17:02 ecs-5c77 CRON[1911725]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 08:17:02 ecs-5c77 CRON[1942188]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 09:17:01 ecs-5c77 CRON[1968671]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 10:17:02 ecs-5c77 CRON[1991671]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 11:17:01 ecs-5c77 CRON[2024276]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 12:17:01 ecs-5c77 CRON[2087639]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 13:17:01 ecs-5c77 CRON[2116618]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 14:17:01 ecs-5c77 CRON[2154427]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 15:17:01 ecs-5c77 CRON[2216767]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 16:17:01 ecs-5c77 CRON[2244407]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 17:17:01 ecs-5c77 CRON[2277587]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 18:17:01 ecs-5c77 CRON[2320813]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 19:17:01 ecs-5c77 CRON[2363367]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 20:17:01 ecs-5c77 CRON[2390437]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 21:17:01 ecs-5c77 CRON[2419541]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 22:17:01 ecs-5c77 CRON[2461569]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 11 23:17:01 ecs-5c77 CRON[2503064]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 00:17:02 ecs-5c77 CRON[2529092]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 01:17:01 ecs-5c77 CRON[2554586]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 02:17:01 ecs-5c77 CRON[2580003]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 03:10:01 ecs-5c77 CRON[2602473]: (root) CMD (test -e /run/systemd/system || SERVICE_MODE=1 /sbin/e2scrub_all -A -r)
Apr 12 03:17:01 ecs-5c77 CRON[2605449]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 04:17:01 ecs-5c77 CRON[2631381]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 05:17:01 ecs-5c77 CRON[2656810]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 06:17:01 ecs-5c77 CRON[2682270]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 06:25:01 ecs-5c77 CRON[2685714]: (root) CMD (test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily ))
Apr 12 07:17:01 ecs-5c77 CRON[2707718]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 08:17:01 ecs-5c77 CRON[2733177]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 09:17:01 ecs-5c77 CRON[2759054]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 10:17:01 ecs-5c77 CRON[2786617]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 11:17:01 ecs-5c77 CRON[2821957]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 12:17:01 ecs-5c77 CRON[2879264]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 13:17:01 ecs-5c77 CRON[2913994]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 14:17:01 ecs-5c77 CRON[2951045]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 15:17:01 ecs-5c77 CRON[3020953]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 16:17:01 ecs-5c77 CRON[3058278]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 17:17:01 ecs-5c77 CRON[3091544]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 18:15:01 ecs-5c77 CRON[3134190]: (root) CMD (/root/bdp-xxl-job-executor-app.sh)
Apr 12 18:15:01 ecs-5c77 CRON[3134189]: (CRON) info (No MTA installed, discarding output)
Apr 12 18:17:01 ecs-5c77 CRON[3135649]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Apr 12 18:20:01 ecs-5c77 CRON[3137877]: (root) CMD (/root/bdp-xxl-job-executor-app.sh)
Apr 12 18:20:01 ecs-5c77 CRON[3137876]: (CRON) info (No MTA installed, discarding output)
Apr 12 18:25:01 ecs-5c77 CRON[3141542]: (root) CMD (/root/bdp-xxl-job-executor-app.sh)
Apr 12 18:25:01 ecs-5c77 CRON[3141540]: (CRON) info (No MTA installed, discarding output)
Apr 12 18:26:49 ecs-5c77 cron[3142815]: (CRON) INFO (pidfile fd = 3)
Apr 12 18:26:49 ecs-5c77 cron[3142815]: (CRON) INFO (Skipping @reboot jobs -- not system startup)
Apr 12 18:30:01 ecs-5c77 CRON[3145218]: (root) CMD (/root/bdp-xxl-job-executor-app.sh)
Apr 12 18:30:01 ecs-5c77 CRON[3145216]: (CRON) info (No MTA installed, discarding output)
Apr 12 18:35:01 ecs-5c77 CRON[3148775]: (root) CMD (/root/bdp-xxl-job-executor-app.sh)
Apr 12 18:35:01 ecs-5c77 CRON[3148773]: (CRON) info (No MTA installed, discarding output)
Apr 12 18:40:01 ecs-5c77 CRON[3152376]: (root) CMD (/root/bdp-xxl-job-executor-app.sh)
Apr 12 18:40:01 ecs-5c77 CRON[3152374]: (CRON) info (No MTA installed, discarding output)
Apr 12 18:45:01 ecs-5c77 CRON[3156198]: (root) CMD (/root/bdp-xxl-job-executor-app.sh)
Apr 12 18:45:01 ecs-5c77 CRON[3156196]: (CRON) info (No MTA installed, discarding output)
...
此外,也可以使用 "
tail -f /var/log/syslog
" 或 "tail -f /var/log/cron
" 来实时查看日志,可以看到cron的执行过程。
修改编辑器
- crontab默认/推荐的编辑器是
nano
,对于用惯了vim
编辑器的同志们来说,这个nano就实在用着别扭。别慌,可以通过如下方式修改编辑器。
- 如果您的系统上没有安装选择编辑器,则可以改用 Linux 上的 EDITOR 环境变量。EDITOR 变量指定系统在 crontab 运行时应调用的文本编辑器的路径。
- 要设置 EDITOR 变量,请使用以下命令:
export EDITOR=/path/to/editor
- 将 nano 设置为默认文本编辑器
export EDITOR=/usr/bin/nano
您还可以在
shell
配置文件中设置EDITOR
变量,例如~/.bashrc
或~/.bash_profile
,以使更改化。例如,要使nano
成为您的默认编辑器,请将以下行添加到您的~/.bashrc
或~/.zshrc
文件中,具体取决于您使用的 shell:
要在不注销的情况下应用更改,请运行以下命令:
source ~/.bashrc
- 将 vim 设置为默认编辑器
vim /etc/profile
# 设置CRONTAB的编辑器
export EDITOR=/usr/bin/vim.basic
或
export EDITOR=/usr/bin/vim.tiny
同理,需要使环境变量生效:
source /etc/profile
这样,你再编辑定时任务(
crontab -e
)时,用的就是vim
编辑器了
X 参考文献
本文作者:
千千寰宇
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!
本文链接: https://www.cnblogs.com/johnnyzen
关于博文:评论和私信会在第一时间回复,或直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
日常交流:大数据与软件开发-QQ交流群: 774386015 【入群二维码】参见左下角。您的支持、鼓励是博主技术写作的重要动力!