Linux例行性工作(at/cron)

一.只执行一次的任务调度at

at针对在规定时间按只执行一次的例行工作。

类似/etc/host.allow,at也有/etc/at.deny和at.allow,作用和host相同,一般只用at.deny即可。(可不可以添加任务调度)

用法

at [-mldv] TIME
at -c 工作号码
-m 即使没有任何输出信息,完成任务后也要发送mail通知用户
-l at -l 相当于atq,列出所有该用户at调度
-d at -d 相当于atrm,取消一个调度
-v 用明显的时间格式列出at调度列表
-c 列出后接的工作的实际命令内容
TIME格式:

HH:MM
HH:MM YYYY-MM-DD
HH:MM[am|pm] [Monyh] [Date]
HH:MM[am|pm] + number [minute|hours|days|weeks]
eg:
ex> now + 5 minutes

使用

启动atd服务:

#/etc/init.d/atd start

添加任务调度:

root@jammg:/etc/init.d# at now + 5minutes
warning: commands will be executed using /bin/sh
at> ls -la /etc
at> <EOT>      <===== 这里输入ctrl + d结束
job 1 at Fri Apr  1 21:23:00 2016
root@jammg:/etc/init.d# at -c 1
#!/bin/sh
# atrun uid=0 gid=0
# mail jammgit 0
umask 22
...
cd /etc/init\.d || {
	 echo 'Execution directory inaccessible' >&2
	 exit 1
}
ls -la /etc

看上面shell脚本,因为这个调度是在/etc/init.d里加进来的,所以执行命令是也会去到/etc/init.d目录
这就是“后台执行”,和nohup命令类似,命令将交给atd服务程序管理,即使脱机也没问题。

atq/atrm

atq列出主机上有多少at调度

atrm [job number] 删除某个工作调度,如上面的job number 是1.


batch:添加负载控制

batch会另系统有空时才进行后台任务。

只要在添加任务调度时不用at而用batch即可,命令用法一样,其它atq等等一样使用。


二.周期性任务调度cron

cron任务调度也支持/etc/cron.allow和/etc/cron.deny.

用法

crontab [-u username] [-l|-e|-r]
-u 只有root才能选,为某任务添加工作调度
-l 查阅crontab的工作内容
-e 编辑crontab的工作内容
-r 删除所有crontab工作内容,若要删除一项,用-e去编辑

使用

启动cron服务:

#/etc/init.d/cron start
若出现:cron: can't lock /var/run/crond.pid, otherpid may be 751: Resource temporarily unavailable,删除这个文件即可。

jammgit@jammg:~$ crontab -e
no crontab for jammgit - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny

Choose 1-4 [2]: 
第一次会让你选择编辑环境
选择vim,并输入:

0 12 * * * ls -la

保存退出,查看工作调度列表:

jammgit@jammg:~$ crontab -l
0 12 * * * ls -la
分 时 日 月 周 命令 
日月和周不可同时设定,不知道系统以哪个为准。
*(星号)代表任何时刻都接受的意思
,(逗号)代表分隔时间;0 3,6, * * * command 指3点和6点
-(减号)代表一个时间段;20 8-12 * * * command 8点到12点每隔20分钟执行一次
/n(斜线)n代表数字;*/5 * * * * command 代表每5分钟执行一次

所以上面就是每天12点执行一次ls -la。

系统配置文件/etc/crontab

如果是系统例行性任务,可以直接在crontab配置文件里添加。

root@jammg:/etc# cat crontab
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user	command
17 *	* * *	root    cd / && run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
run-parts是在指定目录下找出所有文件执行一次(/usr/bin/run-parts)。

三.anacron

anacron是针对由于关机而没有执行到工作调度的问题,它会在开机后进行相应的执行任务;和crontab并用。



<think>好的,用户想了解如何编写和配置Cron调度任务,特别是文件格式和示例。首先,我需要整理Cron的基本结构和配置文件的位置。根据引用[5],CronLinux中用于周期任务调度的守护进程,所以先要介绍它的基本概念。 接下来,用户可能想知道Cron的配置文件在哪里。根据引用[2],/etc/cron.d/目录包含多个配置文件,格式类似/etc/crontab。同时,每个用户的crontab文件可能存放在不同位置,比如/var/spool/cron/,但用户通常用crontab命令编辑,不需要直接修改文件。这部分需要详细说明。 然后,需要解释Cron的时间格式,即五个星号代表的分钟、小时、日期、月份、星期,以及第六个字段的命令。引用[3]提到cron格式由六个字段组成,前五个是时间,最后一个是命令,所以这里要详细解释每个字段的取值范围和特殊符号,比如*、,、-、/等。 接下来,用户可能需要具体的示例。例如,每天的凌晨执行备份,每周一的清理任务等。根据引用[5]中的例子,可以举几个常见的例子,比如每天、每小时、特定时间的任务。 还要注意权限问题,比如系统级任务和用户级任务的区别。引用[2]提到/etc/crontab和/etc/cron.d/中的文件需要指定用户,而用户级任务不需要。这部分需要区分清楚,避免混淆。 最后,提醒用户注意事项,比如环境变量的问题,路径问题,以及日志记录的重要。可能还需要提到如何查看cron日志进行调试,比如在/var/log/syslog中查找。引用[4]提到例行工作分为atcron,但用户关注的是cron,所以可以忽略at部分。 需要确保回答结构清晰,分点说明,并给出示例。同时,根据用户提供的引用,正确标注引用来源,比如引用[2]、[3]、[5]等。可能还需要生成相关问题,比如如何调试cron任务,权限管理,或者特殊时间设置的问题。</think>### 如何编写和配置Cron调度任务? #### 1. **Cron配置文件位置** - **系统级配置**:位于 `/etc/crontab` 和 `/etc/cron.d/` 目录下的文件,需指定执行用户(如 `root`)[^2]。 - **用户级配置**:通过 `crontab -e` 命令编辑,文件存储在 `/var/spool/cron/` 目录中,无需指定用户。 #### 2. **Cron时间格式** Cron表达式由5个时间字段和1个命令字段组成,格式为: ``` * * * * * <command> ``` | 字段 | 分钟 | 小时 | 日期 | 月份 | 星期 | 命令 | |------|------|------|------|------|------|------------| | 取值 | 0-59 | 0-23 | 1-31 | 1-12 | 0-7 | Shell命令 | **特殊符号**: - `*`:匹配所有值(如每小时) - `,`:指定多个值(如 `1,3,5`) - `-`:范围(如 `1-5`) - `/`:间隔频率(如 `*/10` 表示每10分钟)[^3][^5]。 #### 3. **配置文件示例** **系统级任务**(`/etc/crontab` 或 `/etc/cron.d/backup`): ```bash # 每天凌晨2点执行备份脚本,以root用户运行 0 2 * * * root /path/to/backup.sh ``` **用户级任务**(通过 `crontab -e` 添加): ```bash # 每30分钟同步一次日志 */30 * * * * rsync -avz /var/log/ remote:/backup/logs/ # 每周一8:30清理临时文件 30 8 * * 1 rm -rf /tmp/* ``` #### 4. **调试与日志** - 查看Cron执行记录:`grep CRON /var/log/syslog`(Ubuntu/Debian) - 确保脚本使用绝对路径,或通过环境变量配置路径。 #### 5. **注意事项** - 系统级文件需符合语法:每行包含用户字段。 - 避免环境依赖:在脚本中显式设置环境变量(如 `PATH`)。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值