Files
kaka111222333-kaka111222333…/_posts/2014-05-07-linux-job.md
2019-11-17 01:12:14 +08:00

166 lines
5.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
layout: post
title: Linux计划任务
tags: 计划任务 Linux
categories: Linux
---
* TOC
{:toc}
## `at`
at 是个可以处理**仅运行一次**就结束计划任务的命令,不过要运行 at 时, 必须要有 atd 这个服务的支持才行。
[root@www ~]# `/etc/init.d/atd restart`
使用 at 这个命令来产生所要运行的任务,并将任务以文件的方式写入 `/var/spool/at` 目录内,该任务便能被 atd 服务运行
>对at进行权限控制
>
>* 先找寻 `/etc/at.allow` 这个文件,写在这个文件中的使用者才**能**使用 at ,没有在这个文件中的使用者则不能使用 at (即使没有写在 at.deny 当中)
>
>* 如果 /etc/at.allow 不存在,就寻找 `/etc/at.deny` 这个文件,写在这个 at.deny 的使用者**不能**使用 at ,而没有在这个 at.deny 文件中的使用者,就可以使用 at 咯;
>
>* 如果两个文件都不存在,那么只有 root 可以使用 at 命令。
[root@www ~]# `at [-mldv] TIME`
[root@www ~]# `at -c 任务号码`
选项与参数:
`-m` :当 at 的任务完成后,即使没有输出信息,亦以 email 通知使用者该任务已完成。
`-l` at -l 相当於 `atq`,列出目前系统上面的所有该使用者的 at 任务;
`-d` at -d 相当於 `atrm` ,可以取消一个在 at 排程中的任务;
`-v` :可以使用较明显的时间格式列出 at 排程中的任务列表;
`-c` :可以列出后面接的该项工作的实际命令内容。
>TIME时间格式这里可以定义出『什么时候要进行 at 这项工作』的时间,格式有:
>
>* `HH:MM`
>
> ex> 04:00
>
> 在今日的 HH:MM 时刻进行,若该时刻已超过,则明天的 HH:MM 进行此工作。
>
>* `HH:MM YYYY-MM-DD`
>
> ex> 04:00 2009-03-17
>
> 强制在某年某月某日的某时刻进行!
>
>* `HH:MM[am|pm] [Month] [Date]`
>
> ex> 04pm March 17
>
> 强制在某年某月某日的某时刻进行!
>
>* `HH:MM[am|pm] + number [minutes|hours|days|weeks]`
>
> ex> now + 5 minutes ex> 04pm + 3 days
>
> 在某个时间点『再加几个时间后』才进行。
`!`at命令会进入atshell环境使用绝对路径输入指令不易出现问题
`!`at 的运行与终端机环境无关想要查看io结果需要指定终端`echo "Hello" > /dev/tty1`
`!`at 的运行独立于bash所以at任务可以离线运行
**`batch`**:系统有空(负载低于0.8 )时才进行背景任务用法与at完全相同本质上是是at命令加一些控制参数
## `crontab`
crontab 这个命令所配置的工作将会循环的**一直进行**下去, 可编辑 /etc/crontab 来支持,让 crontab 生效的服务是 `crond`
[root@www ~]# ·`/etc/init.d/crond restart`
当使用者使用 crontab 这个命令来创建工作排程之后,该项工作就会被纪录到 `/var/spool/cron/`目录内
cron 运行的每一项工作都会被纪录到 `/var/log/cron`
>权限控制(与at相同默认保留/etc/cron.deny )
>
>* `/etc/cron.allow`:将可以使用 crontab 的帐号写入其中,若不在这个文件内的使用者则不可使用 crontab
>
>* `/etc/cron.deny`:将不可以使用 crontab 的帐号写入其中,若未记录到这个文件当中的使用者,就可以使用 crontab
[root@www ~]# `crontab [-u username] [-l|-e|-r]`
选项与参数:
`-u` :只有 root 才能进行这个任务,亦即帮其他使用者创建/移除 crontab 工作排程;
`-e` :编辑 crontab 的工作内容
`-l` :查阅 crontab 的工作内容
`-r` :移除所有的 crontab 的工作内容,若仅要移除一项,请用 -e 去编辑。
[dmtsai@www ~]$ `crontab -e`
>`0 12 * * * <command>`
>
>`分 时 日 月 周 <命令串>`
特殊字符
`*`代表任何时刻都接受的意思
`,`代表分隔时段的意思
`-`代表一段时间范围内
`/n`代表每间隔n单位
系统计划任务(不受crontab -e命令管理)
编辑`/etc/crontab`文件该文件每1分钟被检查一次
## `anacron`
侦测系统未进行的 crontab 任务(例如 crontab 设置在周末运行,但是周末关机了)
[root@www ~]# `anacron [-sfn] [job]..`
[root@www ~]# `anacron -u [job]..`
选项与参数:
`-s` :开始一连续的运行各项工作 (job),会依据时间记录档的数据判断是否进行;
`-f` :强制进行,而不去判断时间记录档的时间戳记;
`-n` :立刻进行未进行的任务,而不延迟 (delay) 等待时间;
`-u` :仅升级时间记录档的时间戳记,不进行任何工作。
`job` :由 **/etc/anacrontab** 定义的各项工作名称。
配置文件位于`/etc/anacrontab`
>[root@www ~]# cat /etc/anacrontab
>
>SHELL=/bin/sh
>
>PATH=/sbin:/bin:/usr/sbin:/usr/bin
>
>MAILTO=root
>1 65 cron.daily run-parts /etc/cron.daily
>
>7 70 cron.weekly run-parts /etc/cron.weekly
>
>30 75 cron.monthly run-parts /etc/cron.monthly
天数 延迟时间(分) 工作名称定义 实际要进行的命令串
任务文件位于`/var/spool/anacron/`