linux 编写定时任务
使用crontab你可以在指定的时间执行一个shell脚本或者一系列Linux命令。
例如每天备份系统日志
推荐用法:
在linux的shell窗口执行
crontab -e
会打开编辑窗口,类似vi
可以使用
Esc 模式切换
:i 进入插入模式,编辑模式
:wq 保存并退出
:q! 不保存退出。
进入编辑模式之后就可以输入编辑具体的定时任务了
定时任务的格式
# 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
# | | | | |
# * * * * * command to be executed
#每天凌晨0点0分用root用户执行/data/backlog.sh这个shell脚本
0 0 * * * /data/backlog.sh
按Esc退出编辑模式,然后输入:wq 保存并退出,定时任务就定义完了。
属于用户自定义的,会被写到 /var/spool/cron 目录下,生成一个和用户名一致的文件,文件内容就是我们编辑的定时脚本。
在红帽系统中例子:
cd /var/spool/cron
vi root
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
AILTO=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
# | | | | |
# * * * * * command to be executed
23 * * * * /data/backlog/shell/backyeslog.sh
23 * * * * /data/backlog/shell/backtodaylog.sh
如果是在window下编辑完了上传到上面可能会有回车符的问题,解决办法请参看文章的末尾。
Crontab命令的选项
以下是 crontab 的有效选项:
crontab –e : 修改 crontab 文件. 如果文件不存在会自动创建。
crontab –l : 显示 crontab 文件。
crontab -r : 删除 crontab 文件。
crontab -ir : 删除 crontab 文件前提醒用户。
(系统级的)做系统级配置我们会直接配置 /etc/crontab
(用户级的)一般还是建议大家使用 crontab -e ,这样系统也会帮着检查我们配置的脚本语法。
系统级任务调度与用户级任务调度
系 统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成用户自定义的一些任务,可以将用户级任务调度放到系统级任务调度来完成(不建议这么 做),但是反过来却不行,root用户的任务调度操作可以通过“crontab –uroot –e”来设置,也可以将调度任务直接写入/etc /crontab文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个 定时重启系统的任务也是无效的。
其他注意事项
新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。
当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。
千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。
在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’。
定时任务crond服务的操作命令
情况一:正常情况(系统有service命令)
重启服务命令:[root@centos6 /]# service crond restart
启动服务命令:[root@centos6 /]# service crond start
停止服务命令:[root@centos6 /]# service crond stop
情况二:当linux发行的版本没有service这个命令时候,用如下命令进行停止启动:
停止服务:[root@centos6 /]# /etc/init.d/cron空格stop
启动服务:[root@centos6 /]# /etc/init.d/cron空格start
linux 系统中去掉^M的方法
- 对于回车符的定义:
- windows:0D0A
- unix\linux: 0A
- MAC: 0D
- 用VI的命令:
- 使用vi打开文本文件
- vi dos.txt
- 命令模式下输入
- :set fileformat=unix
- :wq