定时任务程总结

定时任务程总结

程序的概念
程序是为决解一个信息处理任务而预先编制的工作执行方案
简单的说:我们使用的命令就是程序;QQ程序;听歌MP34软件;linux系统也是程序
基本特征:一堆代码,一个文件,一个命令。程序静态的,放在电脑中没有没有运行
程序:放在磁盘里
进程概念
简单的说,把系统的程序运行起来就是进程,进程放在内存中
所谓进程就是指正在运行的程序,每当输入一个命令时,shell也会同时启动一个守护进程
每个进程启动时,系统会指定一个唯一的数字给每个进程,这个数字称为进程(ID)或者PID
每个进程都可能以两种方式存在:一个前台和一个后台
一般的系统网络服务都是以后台方式存在,且都会常驻在系统中,直到关机或者主动杀死时

[root@oldboy ~]# 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
[root@oldboy ~]# 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*

定时任务的写法

[root@oldboy ~]# echo 'time sync by oldboy at 20180205' >>/var/spool/cron/root
[root@oldboy ~]# echo '*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1' >>/var/spool/cron/root 
[root@oldboy ~]# crontab -l
time sync by oldboy at 20180205
*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1 每5分钟执行一次时间同步
00 09 05 05 * 

[root@oldboy log]# echo '#print a name' >>/var/spool/cron/root
[root@oldboy log]# echo '* * * * * echo oldboy >>/server/log/oldboy.log' >>/var/spool/cron/root
[root@oldboy 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

实例

[root@oldboy ~]# mkdir /server/scripts/ -p
[root@oldboy ~]# echo 'date +%F' >/server/scripts/oldboy.sh
[root@oldboy ~]# echo "00 09,14 * * 6,7 /sbin/sh /server/scripts/oldboy.sh" >>/var/spool/cron/root
[root@oldboy ~]# 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 会存在这个问题

[root@oldboy home]# rpm -qa|grep sendmail 查询系统是否安装sendmail服务

[root@oldboy ~]# echo 123 >>a.log 2>&1
[root@oldboy ~]# cat a.log 
123
[root@oldboy ~]# ech 123 >>a.log 2>&1
[root@oldboy ~]# cat a.log 
123
-bash: ech: command not found

让标准错误和标准输出都定向到空

书写的方法-脚本总结:

  1. 为定时任务编写必要的注释描述
  2. Shell任务前加/bin/sh
    1. 定时任务结尾加 >/dev/null 2>&1
  3. 定时任务超过2行的命令执行,最好用脚本
  4. 在指定用户下执行相关定时任务
  5. 生产任务程序不要随意打印输出信息 tar zcf echo 123>
  6. 定时任务执行脚本要规范路径 /server/scripts/
  7. 配置定时任务规范操作过程,防止出错

工作中企业生产场景调试crontab定时任务
1) 增加任务执行频率调试任务
2) 调整系统时间调试任务
3) 通过脚步日志来调试任务
4) 注意一些任务命令带来的问题
5) 注意环境变量导致定时任务失败
6) 通过查询定时任务日志分析成功与否

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章