3316

linux系统计划任务crontab笔记

乐果   发表于   2017 年 09 月 13 日 标签:linux

一、cron.d增加定时任务

当我们要增加全局性的计划任务时,一种方式是直接修改/etc/crontab。但是,一般不建议这样做,/etc/cron.d目录就是为了解决这种问题而创建的。

例如,增加一项定时的备份任务,我们可以这样处理:在/etc/cron.d目录下新建文件backup.sh,内容如下:

# m h dom mon dow user command

* 1 * * * root /sbin/mon_zetc_logtar.sh

cron进程执行时,就会自动扫描该目录下的所有文件,按照文件中的时间设定执行后面的命令。

cron执行时,也就是要读取三个地方的配置文件:

一是/etc/crontab,二是/etc/cron.d目录下的所有文件,三是每个用户的配置文件

二、控制对 cron 的使用

/etc/cron.allow 和 /etc/cron.deny 文件被用来限制对 cron 的使用。这两个使用控制文件的格式都是每行一个用户。两个文件都不允许空格。如果使用控制文件被修改了,cron 守护进程(crond)不必被重启。使用控制文件在每次用户添加或删除一项 cron 任务时都会被读取。

无论使用控制文件中的规定如何,根用户都总是可以使用 cron。

如果 cron.allow 文件存在,只有其中列出的用户才被允许使用 cron,并且 cron.deny 文件会被忽略。

如果 cron.allow 文件不存在,所有在 cron.deny 中列出的用户都被禁止使用 cron

三、启动或关闭

由于Cron 是Linux的内置服务,可以用以下的方法启动、关闭这个服务:

/sbin/service crond start //启动服务 /sbin/service crond stop //关闭服务 /sbin/service crond restart //重启服务 sudo service cron start /sbin/service crond reload //重新载入配置

四、crontab介绍

/etc/crontab 文件中的每一行都代表一项任务,它的格式是:

minute hour day month dayofweek command

minute    — 分钟,从 0 到 59 之间的任何整数

hour      — 小时,从 0 到 23 之间的任何整数

day       — 日期,从 1 到 31 之间的任何整数(如果指定了月份,必须是该月份的有效日期)

month     — 月份,从 1 到 12 之间的任何整数(或使用月份的英文简写如 jan、feb 等等)

dayofweek — 星期,从 0 到 7 之间的任何整数,这里的 0 或 7 代表星期日(或使用星期的英文简写如 sun、mon 等等)

command — 要执行的命令(命令可以是 ls /proc >> /tmp/proc 之类的命令,也可以是执行你自行编写的脚本的命令。)

在以上任何值中,星号(*)可以用来代表所有有效的值。譬如,月份值中的星号意味着在满足其它制约条件后每月都执行该命令。

整数间的短线(-)指定一个整数范围。譬如,1-4 意味着整数 1、2、3、4。

用逗号(,)隔开的一系列值指定一个列表。譬如,3, 4, 6, 8 标明这四个指定的整数。

正斜线(/)可以用来指定间隔频率。在范围后加上 / 意味着在范围内可以跳过 integer。譬如,0-59/2可以用来在分钟字段定义每两分钟。间隔频率值还可以和星号一起使用。例如,*/3 的值可以用在月份字段中表示每三个月运行一次任务。

开头为井号(#)的行是注释,不会被处理

五、常见问题

经常发现配置的计划任务没有生效,可以查看系统日志/var/log/syslog

例如:

Sep 13 15:58:47 papaServer01 kernel: [ 3090.887692] init: cron main process (2482) killed by TERM signal
Sep 13 15:58:47 papaServer01 cron[2572]: (CRON) INFO (pidfile fd = 3)
Sep 13 15:58:47 papaServer01 cron[2573]: (CRON) STARTUP (fork ok)
Sep 13 15:58:47 papaServer01 cron[2573]: Error: bad username; while reading /etc/cron.d/pposdb_back

上面问题是配置“用户”错误导致的

Sep 13 15:53:18 papaServer01 kernel: [ 2762.304961] init: cron main process (2337) killed by TERM signal
Sep 13 15:53:18 papaServer01 cron[2348]: (CRON) INFO (pidfile fd = 3)
Sep 13 15:53:18 papaServer01 cron[2349]: (CRON) STARTUP (fork ok)
Sep 13 15:53:18 papaServer01 cron[2349]: (*system*pposdb_back) INSECURE MODE (group/other writable) (/etc/cron.d/pposdb_back)

上面问题是权限导致的,chmod 644 /etc/cron.d/pposdb_back 就可以了。

乐果   发表于   2017 年 09 月 13 日 标签:linux

0

文章评论