linux服务学习之crond

Crond服务

Crond是linux系统中用来定期执行命令或者制定任务的一种服务或者软件。一般安装centos5或者centos6系统的时候,crond就会默认存在了。Crond服务默认每分钟会检查系统是否有需要执行的定时任务,如果有的话就会根据实现定义好的规则来执行这个定时任务。Crond服务就像闹钟一样,准确高效的执行着预先设定好的任务,帮助我们解决企业中许多定时任务问题。但是秒级的定时任务,crond却无能为力,不过却可以通过一下的方法来解决秒级定时任务。

1.自己为守护进程写shell循环

2.Quartz也能实现秒级定时任务

crond定时任务分为两种,一种是系统本身的定时任务,一种是系统用户需要执行的定时任务。这两种定时任务,大致内容相同,但是命令格式有一些差异。

系统本身定时任务在/etc/crontab中,分为7部分,命令格式如下

# 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

用户定时任务同系统本身的定时任务相比,由于用户是确定的,所以缺少了用户部分,不过也可以通过crontab -u 指定定时任务的用户。

和crontab设定定时任务类似的命令还有at,anacron等,下面就简单比较一下他们的不同点:

1.at适合执行一次就结束的服务,突发性任务。了解即可

2.Anacron适合非7*24小时开机的服务器准备的。系统开机执行的,检测停机期间有没有执行的任务,开机执行一遍。

3.Crond服务是工作中非常重要的服务器,at和anacron很少使用

配置crond服务的命令就是crontab,下面介绍一下crontab命令的用法

crontab

参数:

-l 查看crontab文件内容

-e 编辑crontab文件内容

-i 删除crontab文件内容时,会提示确定删除

-r 删除crontab文件内容

-u 指定执行定时任务的用户

注意:-i,-r在生产环境中比较少用,没有特殊需求,尽量用-e编辑crontab内容

cron定时任务存放在/var/spool/cron/root中(root是设定定时任务的用户名,如果用户是abc,那么存放用户abc定时任务的路径就是/var/spool/cron/abc),系统本身的定时任务存放在/etc/crontab中。crond的日志存放路径/var/log/cron。

易错点:

* */2 * * * cmd

这个是每隔两个小时的每分,不是每隔两个小时,定时任务一定要注意下级时间位的参数

书写定时任务要遵循一下规范,可以避免不必要的错误发生。

1.注意系统变量问题

crond只能识别少量的环境变量,所以最好在执行定时任务时,导入所需的时间变量,避免错误

2.定时任务要用绝对路径

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

由于脚本一般需要执行权限(x),为了保证定时任务的顺利运行,可以用/bin/sh  脚本

[[email protected] ~]# touch test.sh
[[email protected] ~]# echo ‘echo "hello world"‘ >>test.sh
[[email protected] ~]# cat test.sh 
echo "hello world"
[[email protected] ~]# ./test.sh
-bash: ./test.sh: 权限不够
[[email protected] ~]# /bin/sh test.sh 
hello world
[[email protected] ~]#

4.时间变量问题要加反斜线\

举个例子,下面两个定时任务,第一个定时任务可以正常执行,第二条则有错误

[[email protected] ~]# ls
anaconda-ks.cfg  backup_2015-11-15.tar.gz  install.log  install.log.syslog  oldboy.txt
[[email protected] ~]# ls /tmp
test.txt  yum.log
You have mail in /var/spool/mail/root
[[email protected] ~]# crontab -l
* * * * * tar zcvf ~/backup_$(date +\%F).tar.gz /etc/services
* * * * * tar zcvf tmp/backup_$(date +%F).tar.gz /etc/services
[[email protected] ~]# 
可以看下cron日志的信息:
Nov 15 23:22:01 localhost CROND[1591]: (root) CMD (tar zcvf tmp/backup_$(date +)
Nov 15 23:22:01 localhost CROND[1590]: (root) CMD (tar zcvf ~/backup_$(date +%F).tar.gz /etc/services)
可以看出第二条的定时任务支执行了tar zcvf tmp/backup_$(date +,所以没有成功

5.>/dev/null 2>&1 问题

[[email protected] ~]# ll /var/spool/clientmqueue/
总用量 0
[[email protected] ~]# ll /var/spool/clientmqueue/
总用量 0
[[email protected] ~]# crontab -e
#just a test
* * * * * /bin/sh /root/test.sh
#* * * * * /bin/sh /root/test.sh >/dev/null 2>&1
[[email protected] clientmqueue]# ll /var/spool/clientmqueue
total 8
-rw-rw----. 1 smmsp smmsp  12 Nov 15 23:40 dftAFFe1Mb002022
-rw-rw----. 1 smmsp smmsp 810 Nov 15 23:40 qftAFFe1Mb002022

如果定时任务末尾不添加>/dev/null 2>&1,在系统sendmail服务未开启的情况下,/var/spool/clienmqueue会生成许多临碎的文件,容易导致相应的磁盘分区inode资源耗尽。所以在执行脚本的定时任务后要追加>/dev/null 2>&1来防止这个问题。

6.定时任务加注释

7.使用脚本代替定时任务命令

8.避免不必要的程序输出

在第4条例子中

* * * * * tar zcvf ~/backup_$(date +\%F).tar.gz /etc/services
tar -v的选项就是没有意义的

9.切记打包时在目标目录上一级打包

在第4条例子中

* * * * * tar zcvf ~/backup_$(date +\%F).tar.gz /etc/services

打包的路径就包含了/,解压的时候就容易覆盖/目录导致不可挽救的后果

所以正确的应该入下:

[[email protected] ~]# cat b.sh
cd /etc
tar zcvf back_$(date +%F).tar.gz ./services
[[email protected] ~]# crontab -l
00 00 */1 * * /bin/sh /root/b.sh >/dev/null 2>&1
[[email protected] ~]#

10.定时任务脚本中的程序路径用全路径

时间: 2024-11-11 13:23:55

linux服务学习之crond的相关文章

Linux基础学习-crond系统计划任务

系统计划任务 大部分系统管理工作都是通过定期自动执行某个脚本来完成的,那么如何定期执行某个脚本,从而实现运维的自动化,这就要借助Linux的cron功能了. 计划任务分为一次性计划任务和周期性计划任务. 一次性计划任务 每晚11店30分开启网站服务. 周期性计划任务 每周一的凌晨3点30分把/var/www/html目录打包备份为backup.tar.gz 顾名思义,一次性计划任务只执行一次,一般用于满足临时的工作需求,可以使用at命令实现. 如果你的Linux没有此命令可以使用yum inst

linux CentOS6.3 安装crond定时服务和设置定时任务

安装crontab [[email protected] ~]# yum install vixie-cron [[email protected] ~]# yum install crontabs 说明: vixie-cron软件包是cron的主程序: crontabs软件包是用来安装.卸装.或列举用来驱动 cron 守护进程的表格的程序. 用以下的方法启动.关闭这个cron服务: /sbin/service crond start //启动服务 /sbin/service crond sto

Linux学习笔记——Linux服务管理(十)

+++++++++++++++++++++++++ +++++Linux服务管理+++++++++++++++++++++++++++++++ 1. 服务简介与分类 服务启动与自启动的概念: 服务启动:就是在当前系统中让服务运行,并提供功能 服务自启动:自启动是指让服务在系统开机或重启之后,随着系统的启动而自动启动的服务 查询已安装的服务: RPM包安装的服务——命令 :chkconfig --list     #查看服务自启动状态,可以看到所有RPM包安装的服务 源码包安装的服务——查看服务安

Linux学习笔记(19) Linux服务管理

1. 服务的分类 Linux服务可分为RPM包默认安装的服务和源码包安装的服务.前者可细分为独立的服务(直接作用于内存中)和基于xinetd服务.xinetd本身是独立的服务,其唯一的功能是管理其他服务.优点是管理的服务不占用内存,缺点是响应缓慢. (1) 启动和自启动 服务启动就是在当前系统中让服务运行,并提供其功能.服务的自启动是指让服务在系统开机或重启之后,随着系统的启动而自动启动服务. (2) 查询已安装的服务 RPM包安装的服务可通过chkconfig --list命令查看,其作用是查

Linux 操作系统学习笔记

一,unix 1.unix 特点 伸缩性强,开放性好, 2.基本原则 所有对象,硬件都是文件 配置数据以文本形式保存 短小的单目的程序构成 多个程序合作完成复杂任务 3.gnu 基本原则是共享,建立自由开放的unix系统 1984年 richard stallman 发起 基本体系是micro kernel 4.gpl Copyleft 原作者所有权 5.linux起源 Linustorvalds, 自由的类unix操作系统, 遵循gnu和gpl 6.linux 可以实现unix功能 遵循开源许

linux基础学习笔记——操作大全

作者:liaoyi 更新时间:2014-6-2 ****************基本操作***************** 关机 shutdown -h now    root用户               init 0              root用户halt      root+一般用户poweroff 重启shutdown -r now    root用户init6     root用户reboot            root+一般用户 注意:1.shutdown 比较灵活,可

linux命令学习笔记(50):crontab命令

前一天学习了 at 命令是针对仅运行一次的任务,循环运行的例行性计划任务,linux系统则是由 cron (crond) 这个系统服务来控制的.Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的.另外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令. 一.crond简介 crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似, 当安装完成操作

LINUX服务介绍(清晰版)

http://www.linuxdiyf.com/viewarticle.php?id=172539 服务列表(按字母顺序排列) 服务名 必需(是/否) 用途描述 注解 acon 否 语言支持 特别支持左手书写语言:阿拉伯语,波斯语和希伯莱语 acpi 否 电源管理 手提电脑电池电扇监控器 acpid 否 监听精灵进程 此进程监听并分配内核中的acpi事件 adsl 否 内部ADSL开关控制 只有你的计算机内部有互联网连接adsl开关时才用到此服务 alsa 否 高级Linux声音构件 这个单独

[原创] linux课堂-学习笔记-目录及概况

本学习笔记基于:网易云课堂-linux课堂 课时1Centos 6.4安装讲解46:14 课时2Centos 6.4桌面环境介绍与网络连接04:30 课时3 Linux目录结构介绍及内核与shell分析37:19 课时4 Linux获得帮助_网络配置_合理关机64:23 课时5 Linux文件权限详解45:47 课时6Linux文件权限详解45:47 课时7目录显示个性操作与全局环境变量的使用与注意···43:25 课时8复制与远程复制_文件查找实例_文件内容查看的··57:49 课时9Linu