linux定时任务crond服务应用指南

Linux的定时任务crond(crontab)服务

1、crond是什么?

crond是linux系统中用来定期执行命令或者指定程序的程序(软件)

2、秒级任务

(1)crond需要方式实现

(2)自己写守护进程shell循环

(3)Quartz也可实现妙计任务

3、定时任务的作用

服务器:7*24小时开机提供服务是网站的基本特征

有重要数据:提高备份周期和备份数量

Linux的定时任务分类

linux系统中定时任务调度的工作可以分为一下两种

(1)系统自身的定期执行的任务

系统周期性自行执行的任务工作。如轮询系统日志、备份系统数据、清理系统缓存等

[root@ysolin ~]# ls -l /var/log/messages*系统的日志

-rw-------. 1 root root 201123 6月  28 14:44 /var/log/messages

-rw-------. 1 root root 200796 6月  26 03:49 /var/log/messages-20160626

系统自动轮询任务的设置配置路径:

[root@ysolin ~]# ls -l /etc/ |grep cron

-rw-------.  1 root root    541 11月 23 2013 anacrontab

drwxr-xr-x.  2 root root   4096 6月  24 18:13 cron.d

drwxr-xr-x.  2 root root   4096 9月  27 2011 cron.daily

-rw-------.  1 root root      0 11月 23 2013 cron.deny

drwxr-xr-x.  2 root root   4096 9月  27 2011 cron.hourly

drwxr-xr-x.  2 root root   4096 9月  27 2011 cron.monthly

-rw-r--r--.  1 root root    457 9月  27 2011 crontab

drwxr-xr-x.  2 root root   4096 9月  27 2011 cron.weekly

(2)用户执行的定时任务

某个用户或系统管理员定期要做的任务工作,用户执行放入任务工作,也就是我们运维管理人员执行的任务工作。

例如:服务器时间同步

[root@ysolin ~]# crontab -l #查看定时任务

time sync by solin

*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1

2、Linux系统下定时任务软件种类

(1)at适合执行一次就结束的调度任务。依赖服务atd

(2)anacron适合于非7*24小时开机的服务准备。anacron并不能指定具体时间执行任务工作,而是以天为周期或者在系统每次开机后执行的任务工作,它会检测服务器停机期间应该执行,但没有执行的任务工作,并将该任务执行一遍。

(3)crond,crond服务默认情况(每分钟),会检查系统中是否有需要执行的定时任务,若有会根据定义好的规则来执行这个定时任务。

注:

(1)crond服务是运行的程序,而crontab命令用户用来设置定时规则的命令

(2)crond服务是企业生产工作中常用的重要服务,at和anacron很少使用,可以忽略。

定时任务crond使用说明

1、语法指令

crontab [-u user] {-l | -e | -r |-i}

查看帮助

[root@ysolin ~]# crontab --help

crontab: invalid option -- '-'

crontab: usage error: unrecognized option

usage:     crontab [-u user] file

crontab [-u user] [ -e | -l | -r ]

(default operation is replace, per 1003.2)

-e    (edit user's crontab)

-l    (list user's crontab)

-r    (delete user's crontab)

-i    (prompt before deleting user's crontab)

-s    (selinux context)

2、指令说明

通过crontab我们可以在固定的间隔时间执行指定的系统指令或script脚本。时间间隔的单位是分、时、日、月、周及以上的任意组合。

3、使用者权限文件

文件                            说明

/etc/cron.deny         #该文件中所列用户不允许使用crontab命令

/etc/cron.allow        #该文件中所列用户允许使用crontab命令,优先于/etc/cron.deny

/etc/spool/cron/      #所有用户crontab配置文件默认都存在此目录,文件名以用户名命令

注:

crontab -e = vi /var/spool/cron/root

crontab -l = cat /var/spool/cron/root

4、指令选项说明含义表

-e      (edit user's crontab)#编辑crontab文件内容

-l       (list user's crontab)#查看crontab文件内容

-r      (delete user's crontab)#删除crontab文件内容

-i       (prompt before deleting user's crontab)#删除crontab文件内容,删除前会提示。

-u               #指定使用的用户执行任务

5、指令的使用格式

(1)crond语法格式中时间段的含义

[root@ysolin ~]# 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) OR sun,mon,tue,wed,thu,fri,sat

# |  |  |  |  |

# *  *  *  *  * user-name command to be executed

(2)crontab语法格式中特殊符号含义

*       # *号,表示任意时间,如每分、每小时、每日、每月、每周

-        #减号,表示分隔符,表示一个范围区间

,#逗号,表示分割时间段的意思。

/n     # n代表数字,即“每隔n单位时间”

(3)crontab依赖服务

[root@ysolin ~]# chkconfig --list crond

crond            0:off 1:off 2:on  3:on  4:on  5:on  6:off

[root@ysolin ~]# /etc/init.d/crond status

crond (pid  1430) is running...

[root@ysolin ~]# ps -ef |grep crond | grep -v grep

root       1430      1  0 Jun28 ?        00:00:00 crond

[root@ysolin ~]# /etc/init.d/crond restart

Stopping crond:                                            [  OK  ]

Starting crond:                                            [  OK  ]

定时任务crond实例说明

范例1:每五分钟同步一次系统时间

[root@ysolin ~]# vi /var/spool/cron/root

[root@ysolin ~]# echo 'time sync by solin' >>/var/spool/cron/root

[root@ysolin ~]# echo '*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1' >>/var/spool/cron/root

[root@ysolin ~]# crontab -l

time sync by solin

*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1

范例2:每个月1、10、20日的凌晨3:30分重启apache

30 3 1,10,20 * * /application/apache/bin/apachectl graceful

生产环境crond专业实例

1、规范定时任务两例(练习)

(1)每分钟打印一次solil到/var/log/solin.log中

[root@ysolin ~]# crontab -e

添加任务

#print my name to log

* * * * * echo solil >>/var/log/solin.log

[root@ysolin ~]# crontab -l

#time sync by solin

*/5 * * * * /sbin/ntpdate time.windows.com >/dev/null 2>&1

#print my name to log

* * * * * echo solil >>/var/log/solin.log

[root@ysolin ~]# cat /var/log/solin.log

solil

solil

solil

(2)周期任务使用脚本每周六、日上午九点和下午两点(周期)打印时间(格式:****-**-**)

创建脚本

[root@ysolin ~]# date +%F

2016-06-29

[root@ysolin ~]# echo 'date +%F' >scripts/date.sh

[root@ysolin ~]# cat scripts/date.sh

date +%F

[root@ysolin ~]# sh scripts/date.sh

2016-06-29

设置定时任务

[root@ysolin ~]# echo "#print date " >>/var/spool/cron/root

[root@ysolin ~]# echo "00 09,14 * * 6,7 /bin/sh /root/scripts/date.sh >/dev/null 2>&1" >>/var/spool/cron/root

[root@ysolin ~]# crontab -l |tail -2

#print date

00 09,14 * * 6,7 /bin/sh /root/scripts/date.sh >/dev/null 2>&1

注:确保调用的命令是可执行的;路径需要绝对路径

2、书写crond定时任务基本要领

(1)为定时任务命令加必要的注释

写定时任务规则时尽可能的加上注释(最好是英文英文注释),方便后期更高改,其他运维人员理解定时任务的内容

(2)执行脚本任务前加/bin/sh

执行定时任务时,如果是执行脚本,请尽量在脚本后面带上/bin.sh命令,防止脚本没有执行权限而出错

(3)定时任务命令或脚本结尾加>/dev/null 2>&1

2>&1表示让标准错误和标准输出一样,即把脚本正常和错误输出都都重定向到/dev/null,不记录任何输出。

>/dev/null 2>&1等价于1>/dev/null 2>/dev/null 等价于 &>dev/null

如果定时任务规则结尾不加>/dev/null 2>&1,很容易导致inode磁盘空间被占满,从而系统服务不正常。

(4)定时任务或层序最好在脚本里执行

(5)在指令用户下执行相关定时任务

需要root权限执行的任务可以登录到root用户然后设置,如果不需要root权限,可以登录到普通用户(也可以直接在root下c’ron’tab -u solin -e的方式直接设置)设置。不同用户环境问题:如果调用了环境变量/etc/profile (如生产环境中java程序的定时任务),最好在程序脚本中,将用的到环境变量重新export下

(6)生产任务程序不要随意打印输出信息

在开发定时任务程序或脚本时,在调试好脚本程序后,应尽量把DEBUG及命令输出的内容信息屏蔽掉,如果确实需要输出日志,可定向指定日志文件,避免产生系统垃圾。

(7)定时任务执行的脚本要规范路径/server/scripts

(8)配置定时任务规范操作过程,防止出错。

首先要在命令行操作成功,然后复制成功的命令到脚本里,减少配置定时任务错误;

然后测试脚本,测试成功后,复制脚本的规范路径到定时任务里;

现在测试环境下测试,然后正式环境规范部署。

3、系统定时任务配置

轮询日志

[root@ysolin ~]# ll /var/log/messages* #系统报错日志

-rw-------. 1 root root 201538 6月  29 19:48 /var/log/messages

-rw-------. 1 root root 200796 6月  26 03:49 /var/log/messages-20160626

[root@ysolin ~]# ll /var/log/secure* #安全信息和系统登录与网络连接的信息

-rw-------. 1 root root 8562 6月  29 23:43 /var/log/secure

-rw-------. 1 root root 6490 6月  26 01:45 /var/log/secure-20160626

[root@ysolin ~]# ls /etc/cron.daily/

logrotate

[root@ysolin ~]# cat /etc/cron.daily/logrotate # logrotate程序是一个日志文件管理工具

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1

EXITVALUE=$?

if [ $EXITVALUE != 0 ]; then

/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"

fi

exit 0

[root@ysolin ~]# cat /etc/logrotate.conf # logrotate的配置文件

# see "man logrotate" for details

# rotate log files weekly

weekly

# keep 4 weeks worth of backlogs

rotate 4

# create new (empty) log files after rotating old ones

create

# use date as a suffix of the rotated file

dateext

# uncomment this if you want your log files compressed

#compress

# RPM packages drop log rotation information into this directory

include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here

/var/log/wtmp {

monthly

create 0664 root utmp

minsize 1M

rotate 1

}

/var/log/btmp {

missingok

monthly

create 0600 root utmp

rotate 1

}

# system-specific logs may be also be configured here.

4、企业生产环境如何调试crond定时任务(个人建议)

(1)增加执行频率调试任务

在调试时,把任务执行周期缩短,测试出定时任务效果

规范的操作流程(开发和运维人员):

个人的开发配置环境è办公室的测试环境èIDC机房的测试环境èIDC机房的正式环境

(2)调整系统时间调试任务(不能用于生产环境)

把系统的时间调整为定时任务执行的前五分钟,确保定时任务能够正确执行。

(3)通过日志输出调试定时任务

在脚本中加入日志输出,然后把输出打到指定的日志中,然后观察日志内容结果,看是否执行或正确执行。

(4)注意一些任务命令带来的问题

如:*/1 * * * * * echo “Hello Word” >> /tmp/solin.log>/dev/null 2>&1

因前面已经有了重定向,后面要去掉/dev/null 2>&1

(5)注意环境变量导致的定时任务故障

在调试java程序的时候,注意环境变量,把环境变量的定义加到脚本里

(6)通过crond定时任务服务日志调试定时任务

[root@ysolin ~]# tail -f /var/log/cron

Jun 30 02:00:01 ysolin CROND[3537]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)

Jun 30 02:01:01 ysolin CROND[3541]: (root) CMD (run-parts /etc/cron.hourly)

Jun 30 02:01:01 ysolin run-parts(/etc/cron.hourly)[3541]: starting 0anacron

Jun 30 02:01:01 ysolin anacron[3550]: Anacron started on 2016-06-30

Jun 30 02:01:01 ysolin anacron[3550]: Jobs will be executed sequentially

Jun 30 02:01:01 ysolin anacron[3550]: Normal exit (0 jobs run)

Jun 30 02:01:01 ysolin run-parts(/etc/cron.hourly)[3552]: finished 0anacron

Jun 30 02:05:01 ysolin CROND[3555]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)

Jun 30 02:10:01 ysolin CROND[3559]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)

Jun 30 02:15:01 ysolin CROND[3563]: (root) CMD (/sbin/ntpdate time.windows.com >/dev/null 2>&1)

crond定时任务生产应用问题10箴言

1、系统环境变量问题

2、定时任务绝对路径

3、脚本权限问题加/bin/sh

4、时间变量问题用反斜线

5、>/dev/null 2>&1,防止磁盘空间(inode)被占满

6、定时任务规则之前加注释

7、使用脚本程序代替命令行定时任务

8、避免不必要的程序及命令输出

9、切到目标目录的上一级打包目标

10、定时任务脚本中的程序命令用全路径

crond生产环境案例及解决过程

1、No space left on davice生产环境故障

问题描述:

工作中设置crontab定时任务时任务规则保存时,提示“No space left on davice”,此时df -h检查磁盘,发现磁盘有空余空间,用df -i检查则发现/var目录已占用100%的inode数量。

最后检查发现/var/spool/clientmqueue/下有大量的文件,执行cd /var/spool/clientmqueue ;rm -f * 自动跳出,无法删除

故障分析:

当系统中crond定时任务执行的程序有输出内容时,输出的内容会以邮件的形式放送给crond的用户(默认是root),而sendmail等服务没有开启的时,这些邮件内容就会在邮件队列临时目录中产生文件,导致消耗inode数量,一旦indode数量耗尽就会导致系统无法写入文件而报错:No space left on davice

解决方式:

(1)删除目录或文件

[root@ysolin ~]#cd /var/spool/clientmqueue && ls |xargs rm -f

或者

[root@ysolin ~]# cd /var/spool && rm -rf clientmqueue

[root@ysolin ~]# mkdir clientmqueue && chmod 770 clientmqueue && chown smmsp.smmsp -R /var/spool/clientmqueue

(2)修改定时任务,添加 >/dev/null 2>&1

2、No space left on davice生产环境故障

理论:

inode译成中文就是索引节点,每个存储设备(例如硬盘)或存储设备的分区被格式化为文件系统后,应该有两部份,一部份是inode,另一部份是Block,Block是用来存储数据用的。

而inode,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。

常见问题:No space left on device

解决思路

(1)查看分区使用情况:

[root@ysolin ~]# df -lk

查看分区使用情况

(2)查看inode使用信息:

[root@ysolin ~]# df -i

#查看inode使用信息

解决方式:

(1)find锁定占用空间最大的目录(通常目录大小越大,表示目录下的文件越多)

(2)删除多余的inode节点。(find /xxx -type f -exec rm {} \;)

如:

查看系统空间使用最多的文件

find / -type f -size -1k | xargs -i dirname {} | sort  -nr| uniq -c | sort -nr | tail

删除:(一定要确定是自己的站点,而且所删除的东西已经不重要)

find /路径/路径 -size -1k -type f | xargs rm -f

linux查看定时服务,linux 定时任务 crond 服务介绍相关推荐

  1. linux 定时任务 crond 服务介绍

    linux定时任务crond服务应用指南 Linux的定时任务crond(crontab)服务 1.crond是什么? crond是linux系统中用来定期执行命令或者指定程序的程序(软件) 2.秒级 ...

  2. linux未被识别crond服务,linux 定时任务 crond 服务介绍

    linux定时任务crond服务应用指南 Linux的定时任务crond(crontab)服务 1.crond是什么? crond是linux系统中用来定期执行命令或者指定程序的程序(软件) 2.秒级 ...

  3. Linux服务项目实例,linux 定时任务 crond 服务应用指南(项目实例)

    linux定时任务crond服务应用指南 Linux的定时任务crond(crontab)服务 1.crond是什么? crond是linux系统中用来定期执行命令或者指定程序的程序(软件) 2.秒级 ...

  4. linux查看显示器名称命令,linux 查看显示器信息Linux下查看硬件信息命令大全

    /proc 虚拟的目录,是系统内存的映射.可直接访问这个目录来获取系统信息.其中也包含下面的信息: 主机CPU信息:cpuinfo 主机DMA通道信息:dma 文件系统信息:filesystems 主 ...

  5. linux查看显卡核心数,linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 | 帮助信息-动天数据...

    linux查看硬件信息,linux查看硬盘信息,linux查看CPU信息,linux查看显卡,硬件型号信息 作者:dthost | 时间:2015-09-30 | 8,325 次阅读 linux服务器 ...

  6. linux 查看文件的行,linux查看文件有多少行内容的命令介绍

    linux查看文件有多少行内容的命令介绍 发布时间:2020-04-07 09:59:31 来源:亿速云 阅读:170 作者:小新 今天小编给大家分享的是linux查看文件有多少行内容的命令介绍,很多 ...

  7. 通过命令查看linux 密码,linux查看用户密码(linux查看用户密码命令)

    linux查看用户密码(linux查看用户密码命令) 2020-05-15 13:18:30 共10个回答 1.用户名和密码的存储位置存储帐号的文件:/etc/passwd存储密码的文件:/etc/s ...

  8. Linux定时任务crond服务

    一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动cro ...

  9. linux查看tomcat 控制台,linux 下查看Tomcat的状态,以及开启停止服务命令

    1.首先进入你的tomcat 的bin目录下 cd /你的安装目录/tomcat/bin 查看服务启动情况 ps -ef|grep java 此条命令具体含义 ps:将某个进程显示出来 -A 显示所有 ...

最新文章

  1. 求1!+2!+3!+...+10!的值
  2. Nginx 备战-优化指南
  3. YFIOServer 后台IO接口使用说明
  4. 全志A33-BootLoader的两个阶段:boot0和second boot
  5. burpsuite csrf攻击_WEB安全之CSRF
  6. Python 使用pyinstaller将py文件发布成exe程序
  7. 分布式session之redis解决方案实现
  8. LinkCode 第k个排列
  9. Arduino与墨子号 BC26 4G模块的对接开发
  10. 健康管理师考试重点详解!(基础知识篇)
  11. 字节跳动java面试题,附详细答案解析
  12. 精心整理10个高逼格的优质素材(视频、图片)网站
  13. 【矢量图】PyEcharts导出图片并矢量化
  14. 京东返利PHP采集关键字,PHP实现京东API的授权HASH算法
  15. 遭遇应用程序正常初始化失败
  16. 网络安全等保/安全合规总结
  17. python中def main是什么意思_Python main()函数解析
  18. app store 注册账号生成证书上传app完整的教程
  19. html加载完成 产生动作,页面加载功能设计总结
  20. 安卓是属于全人类的还是谷歌的私有产品?

热门文章

  1. 高德地图API之驾车路线
  2. Java Comparator比较器
  3. 下载spring框架
  4. 科沃斯机器人招股_科沃斯机器人股份有限公司首次公开发行股票招股说明书(申报稿2017年1月22日报送)...
  5. postgresql|数据库|基于本地备份的远程备份策略
  6. 额温枪、耳温枪设计方案
  7. Chrome浏览器修改用户资料(User Data)的存放位置
  8. 第七周python作业
  9. 简单邮件传输协议SMTP
  10. 伍迷创意随想集 之 杯具拥有个性,个性成就杯具 - 伍迷 - 博客园