定时任务程总结
程序的概念
程序是为决解一个信息处理任务而预先编制的工作执行方案
简单的说:我们使用的命令就是程序;QQ程序;听歌MP34软件;linux系统也是程序
基本特征:一堆代码,一个文件,一个命令。程序静态的,放在电脑中没有没有运行
程序:放在磁盘里
进程概念
简单的说,把系统的程序运行起来就是进程,进程放在内存中
所谓进程就是指正在运行的程序,每当输入一个命令时,shell也会同时启动一个守护进程
每个进程启动时,系统会指定一个唯一的数字给每个进程,这个数字称为进程(ID)或者PID
每个进程都可能以两种方式存在:一个前台和一个后台
一般的系统网络服务都是以后台方式存在,且都会常驻在系统中,直到关机或者主动杀死时
[[email protected] ~]# netstat -tunlp |grep sshd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1286/sshd
tcp 0 0 :::22 :::* LISTEN 1286/sshd
第一个带有进程或者守护进程的服务
第1章 Crond定时任务服务
Linux的定时任务服务crond(crontab)
Crond是linux系统中用来定期执行命令和指定程序任务的一种服务或软件
安装系统默认存在,在优化开机自启动是一个服务
Crond服务默认情况(每分钟),会检查系统中是否需要执行的定时任务,如果有,就会根据事先定义好的规则来执行这个定时任务 【闹钟】
秒级任务:
1) crond无能为力
2) 自己写守护进程shell循环
3) Quartz也可以实现
Crond====闹钟
Linux定时任务分类
1、系统自身的定期执行任务
2、用户执行的任务
1.1 Linux定时任务分类;
1) at适合执行一次就结束的调度任务。 突发性的任务,每天晚上-需要依赖atd服务
2) anacron 适合非7*24小时开机的服务器准备的。开机执行的任务,检测停机期间没有执行任务,开机后一次性执行一遍
3) crond 服务默认情况(每分钟),会检查系统中是否需要执行的定时任务,如果有,就会根据事先定义好的规则来执行这个定时任务 【闹钟】*****
提示:crond是一个定时任务守护进程,而crontab是用户用来设置定时任务规则的命令
1.1.1 定时任务说明
参数:
-l 查看crontab 文件内容
-e 编辑crontab 任务内容
1.1.2 定时任务的格式语法
基本格式如下:
01 * * * * cmd
02 * * * * cmd
03 * * * * cmd
04 * * * * cmd
05 * * * * cmd
06 * * * * cmd
[[email protected] ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
*# For details see man 4 crontabs
Example of job definition:
.---------------- minute 分(0 - 59)
| .------------- hour 时(0 - 23)
| | .---------- day of month 天(1 - 31)
| | | .------- month (1 - 12) 月OR jan,feb,mar,apr ...
| | | | .---- day of week (0 - 6) 周(Sunday=0 or 7) ORsun,mon,tue,wed,thu,fri,sat
| | | | |
user-name command to be executed*
定时任务的写法
[[email protected] ~]# echo ‘time sync by oldboy at 20180205‘ >>/var/spool/cron/root
[[email protected] ~]# echo ‘*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1‘ >>/var/spool/cron/root
[[email protected] ~]# crontab -l
time sync by oldboy at 20180205
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1 每5分钟执行一次时间同步
00 09 05 05 *
[[email protected] log]# echo ‘#print a name‘ >>/var/spool/cron/root
[[email protected] log]# echo ‘* * * * * echo oldboy >>/server/log/oldboy.log‘ >>/var/spool/cron/root
[[email protected] log]# crontab -l
#time sync by oldboy at 20180205
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
#print a name
* * * * * echo oldboy >>/server/log/oldboy.log
实例
[[email protected] ~]# mkdir /server/scripts/ -p
[[email protected] ~]# echo ‘date +%F‘ >/server/scripts/oldboy.sh
[[email protected] ~]# echo "00 09,14 * * 6,7 /sbin/sh /server/scripts/oldboy.sh" >>/var/spool/cron/root
[[email protected] ~]# crontab -l
#time sync by oldboy at 20180205
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1
#print a name
* * * * * echo oldboy >>/server/log/oldboy.log
#date snyc
00 09,14 * * 6,7 /bin/sh /server/scripts/oldboy.sh >/dev/null 2>&1
注意:脚本中要使用绝对路径
不加/dev/null 2>&1的话会inode会被耗尽
重点:当一个定时任务执行的时候,就会给系统发一份邮件。Sendmail邮件服务,经常是关闭的,所以定时任务发送的邮件就会临时放在/var/spool/clientmqueue/时间长了文件数特别多。Centos5 会存在这个问题
[[email protected] home]# rpm -qa|grep sendmail 查询系统是否安装sendmail服务
[[email protected] ~]# echo 123 >>a.log 2>&1
[[email protected] ~]# cat a.log
123
[[email protected] ~]# ech 123 >>a.log 2>&1
[[email protected] ~]# cat a.log
123
-bash: ech: command not found
让标准错误和标准输出都定向到空
书写的方法-脚本总结:
- 为定时任务编写必要的注释描述
- Shell任务前加/bin/sh
-
- 定时任务结尾加 >/dev/null 2>&1
- 定时任务超过2行的命令执行,最好用脚本
- 在指定用户下执行相关定时任务
- 生产任务程序不要随意打印输出信息 tar zcf echo 123>
- 定时任务执行脚本要规范路径 /server/scripts/
- 配置定时任务规范操作过程,防止出错
工作中企业生产场景调试crontab定时任务
1) 增加任务执行频率调试任务
2) 调整系统时间调试任务
3) 通过脚步日志来调试任务
4) 注意一些任务命令带来的问题
5) 注意环境变量导致定时任务失败
6) 通过查询定时任务日志分析成功与否
原文地址:http://blog.51cto.com/jungiewolf/2095635