Linux定时启动任务的一些命令...
2009-09-25 11:52
281 查看
/*
* 一年前整的一些资料,在不弄出来真不知道那天就没了,本身我是个懒散的人,也不想再找第二次!
* 下面的内容也是以前baidu/Google的,然后整理了下面的资料。忘了是不是都能用了,当时只试了一部分。。。
*/
要使用自动启动进程的功能,就需要掌握以下几个启动命令:
at 命令
==================================================================
at [-V] [-q 队列 ] [-f 文件名 ] [-mldbv] 时间
at -c 作业 [ 作业 ...]
at 允许使用一套相当复杂的指定时间的方法,实际上是将 POSIX.2 标准扩展了。它可以接受在当天的 hh:mm (小时 : 分钟)式的时间指定。如果该时间已经过去,那么就放在 第二天执行。用户还可以采用 12 小时计时制,即在时间后面加上 AM (上午)或者 PM (下午)来说明是上午还是下午。可以指定命令执行的具体日期,指定格式为 month day (月 日)或者 mm/dd/yy (月 / 日 / 年)或者 dd.mm.yy (日 . 月 . 年)。指定的日期必须跟在指定时间 的后面。
上面介绍的都是绝对计时法,其实还可以使用相对计时法。 指定格式为: now + count time-units , now 就是当前时间, time-units 是时间单位,这里可以是 minutes (分钟)、 hours (小时)、 days (天)、 weeks (星期)。 count 是时间的数量,究竟是几天,还是几小时,等 等。还有一种计时方法就是直接使用 today (今天)、 tomorrow (明天)来指定完成命令的时间。
[例]指定在今天下午 5:30 执行某命令。假设现在时间是中午 12:30 , 2008 年 2 月 24 日,其命令格式如下:
at 5:30pm
at 17:30
at 17:30 today
at now + 5 hours
at now + 300 minutes
at 17:30 24.2.99
at 17:30 2/24/99
at 17:30 Feb 24
[例]
$at -f work 4pm + 3 days
在三天后下午 4 点执行文件 work 中的作业。
$at -f work 10am Jul 31
在 7 月 31 日上午 10 点执行文件 work 中的作业。
在任何情况下,超级用户都可以使用这个命令。对于其他用户来说,是否可以使用就取决于两个文件: /etc/at.allow和 /etc/at.deny 。如果 /etc/at.allow 文件存在的话,那么只有在其中列出的用户才可以使用 at 命令;如果该文件不存在,那么将检查 /etc/at.deny 文件是否存在,在这个文件中列出的用户均不能使用该命令。如果两个文件都不存在,那么只有超级用户可以使用该命令;空的 /etc/at.deny文件意味着所有的用户都可以使用该命令,这也是默认状态。
如果 at 命令是从一个使用 su 命令切换到用户 shell 中执行的,那么当前用户被认为是执行用户,所有的错误和输出结果都会送给这个用户。但是如果有邮件送出的话,收到邮件的将是原来的用户,也就是登录时 shell 的所有者。
at 命令中的参数
-V 将标准版本号打印到标准错误中。
-q queue 使用指定的队列。队列名称是由单个字母组成,合法的队列名可以由 a-z 或者 A-Z 。 a 队列是 at 命令的默认队列。
-m 作业结束后发送邮件给执行 at 命令的用户。
-f file 使用该选项将使命令从指定的 file 读取,而不是从标准输入读取。
-l atq 命令的一个别名。该命令用于查看安排的作业序列,它将列出用户排在队列中的作业,如果是超级用户,则列出队列中的所有工作。命令的语法格式如下 :atq [-V] [-q 队列 ][-v]
-d atrm 命令的一个别名。该命令用于删除指定要执行的命令序列,语法格式如下 :atrm [-V] 作业 [ 作业 ...]
-c 将命令行上所列的作业送到标准输出。
$ at 2:00 12/25/08
warning:command will be executed using /bin/sh.
提醒用户将使用哪个 shell 来执行该命令序列。 然后系统出现 at> 提示符,等待用户输入进一步的信息,也就是需要执行的命令序列:
at> find / -name “*.txt”|lpr
at> echo “foxy : All texts have been printed.You
can take them over.Good day!River” |mail -s ”job
done” foxy
输入完每一行指令然后回车,所有指令序列输入完毕后,使用组合键结束 at 命令的输入。这时候屏幕将出现如下信息:
job 1 at 2008-12-25 02:00
实际上如果命令序列较长或者经常被执行的时候,一般都采用将该序列写到一个文件中,然后将文件作为 at 命令的输入来处理。这样不容易出错。
[ 例 ] 找出系统中所有以 txt 为后缀名的文件,并且进行打印。打印结束后给用户 foxy 发出邮件通知取件。指定时间为十二月二十五日凌晨两点。
$at </tmp/aa 2:00 12/25/08
/tmp/aa 中的内容为
find / -name “*.txt” | lpr
echo “foxy:All texts have been printed. River” |mail -s
”JobDone” foxy
系统会在十二月二十五日凌晨两点查找系统中所有的扩展名为 txt 的文件打印,打印完毕给 foxy 发送一封邮件,在这里重定向符 < 可以使用 -f 参数
batch 命令
==================================================================
batch 用低优先级运行作业,该命令几乎和 at 命令的功能完全相同,唯一的区别在于, at 命令是在指定时间,很精确的时刻执行指定命令;而 batch 却是在系统负载较低,资源比较空闲的时候执行命令。该命令适合于执行占用资源较多的命令。
batch 命令的语法格式也和 at 命令十分相似,即batch [-V] [-q 队列 ] [-f 文件名 ] [-mv] [ 时间 ]
一般地说,不用为 batch 命令指定时间参数,因为 batch本身的特点就是由系统决定执行任务的时间,如果用户再指
定一个时间,就失去了本来的意义。具体的参数解释可以参考 at 命令。
$batch
at> find / -name *.txt|lpr
at> echo “foxy : All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy
所有指令序列输入完毕后,使用组合键结束 at 命令的输入 。
cron 命令
==================================================================
前面的 at 和 batch 命令都会在一定时间内完成一定任务,但是要注意它们都只能执行一次。也就是说,当指定了运行命令后,系统在指定时间完成任务,一切就结束了。但是在很多时候需要不断重复一些命令,这时候就可以使用 cron 命令来完成任务。
cron 命令在系统启动时就由一个 shell 自动启动,进入后台(所以不需要使用 & 符号)。
一般的用户没有运行该命令的权限,虽然超级用户可以手工启动 cron ,不过还是建议将其放到 shell 中由系统自行启动。
首先 cron 命令会搜索 /var/spool/cron 目录,寻找以 /etc/passwd 文件中的用户名命名的 crontab 文件,被找到的这种文件将载入内存。例如 /etc/passwd 中一个用户名为foxy 的用户,它所对应的 crontab 文件就应该 是 /var/spool/cron/foxy 。也就是说,以该用户命名的crontab 文件存放在 /var/spool/cron 目录下面。 cron 命令还将搜索 /etc/crontab 文件,这个文件是用不同的格式写成的。
cron 启动以后,它将首先检查是否有用户设置了 crontab文件,如果没有就转入“休眠”状态,释放系统资源。所以该后台进程占用资源极少。它每分钟“醒”过来一次,查看当前是否有需要运行的命令。命令执行结束后,任何输出都将作为邮件发送给 crontab 的所有者,或者是/etc/crontab 文件中 MAILTO 环境变量中指定的用户。
上面简单介绍了一些 cron 的工作原理,但是 cron 命令的执行不需要用户干涉;需要用户修改的是 crontab 中要执行的命令序列,所以下面介绍 crontab 命令。
crontab 命令
==================================================================
crontab 命令用于安装、删除或者列出用于驱动 cron 后台进程的表格。也就是说,用户把需要执行的命令序列放到rontab 文件中以获得执行。每个用户都可以有自己的rontab 文件。下面就来看看如何创建一个 crontab 文件。
在 /var/spool/cron 下的 crontab 文件不可以直接创建或者直接修改。 crontab 文件是通过 crontab 命令得到的。现在假设有个用户名为 foxy ,需要创建自己的一个 crontab文件。首先可以使用任何文本编辑器建立一个新文件,然后向其中写入需要运行的命令和要定期执行的时间。然后存盘退出。假设该文件为 /tmp/test.cron 。再后就是使用 crontab 命令来安装这个文件,使之成为该用户的crontab 文件。输入: crontab test.cron这样一个 crontab 文件就建立好了。可以转到 /var/spool/cron 目录下面查看,发现多了一个 foxy 文件。这个文件就是所需的 crontab 文件。
crontab 命令的语法格式
crontab [ -u user ] file
crontab [ -u user ] {-l|-r|-e}
第一种格式用于安装一个新的 crontab 文件,安装来源就是 file 所指的文件,如果使用“ -” 符号作为文件名,那就意味着使用标准输入作为安装来源。
-u 如果使用该选项,也就是指定了是哪个具体用户的crontab 文件将被修改。如果不指定该选项, crontab 将默认是操作者本人的 crontab ,也就是执行该 crontab 命令的用户的 crontab 文件将被修改。但是请注意,如果使用了 su 命令再使用 crontab 命令很可能就会出现混乱的情况。所以如果是使用了 su 命令,最好使用 -u 选项来指定究竟是哪个用户的 crontab 文件。
-l 在标准输出上显示当前的 crontab 。
-r 删除当前的 crontab 文件。
-e 使用 VISUAL 或者 EDITOR 环境变量所指的编辑器编辑当前的 crontab 文件。当结束编辑离开时,编辑后的文件将自动安装。
crontab 文件的格式说明 :
* 逗号 (',') 指定列表值。如 : "1,3,4,7,8"
* 中横线 ('-') 指定范围值 如 "1-6", 代表 "1,2,3,4,5,6"
* 星号 ('*') 代表所有可能的值
在 crontab 文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔,每个域当中有多个值的时候可以使用逗号来分隔。
# Use the hash sign to prefix a comment
# +------------ minute (0 - 59)
# | +---------- hour (0 – 23 , 00 点就是晚上 12 点 )
# | | +-------- day of month (1 - 31)
# | | | +------ month (1 - 12)
# | | | | +---- day of week (0 - 7) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
[例]
5,15,25,35,45,55 16,17,18 * * * command
这就是表示任意天任意月,其实就是每天的 16 点、 17 点、 18点的 5 min 、 15 min 、 25 min 、 35 min 、 45 min 、 55 min 时执行 command 命令。
[ 例 ] 每天每小时的 1 分执行用户目录下的 bin/account 这个指令:
1 * * * * bin/account
[例]
每天三点二十分执行用户目录下如下所示的两个指令 ( 每个指令以 ; 分隔 )
20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire>expire.1st)
[ 例 ] 我们来看一个超级用户的 crontab 文件:
#Run the ‘atrun' program every minutes
#This runs anything that's due to run from ‘at’.See man ‘at’ or ‘atrun’.
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun
40 7 * * * updatedb
8,10,22,30,39,46,54,58 * * * * /bin/sync
如果需要改变其中的命令内容时,还是需要重新编辑原来的文件,然后再使用 crontab命令安装。
可以使用 crontab 命令的用户是有限制的。 如果 /etc/cron.allow 文件存在,那么只有 其中列出的用户才能使用该命令;如果该文件不存在但 cron.deny 文件存在,那么只有未列在该文件中的用户才能使用 crontab 命令;如果两个文件都不存在,那就取决于一些参数的设置,可能是只允许超级用户使用该命令,也可能是所有用户都可以使用该命令。
* 一年前整的一些资料,在不弄出来真不知道那天就没了,本身我是个懒散的人,也不想再找第二次!
* 下面的内容也是以前baidu/Google的,然后整理了下面的资料。忘了是不是都能用了,当时只试了一部分。。。
*/
要使用自动启动进程的功能,就需要掌握以下几个启动命令:
at 命令
==================================================================
at [-V] [-q 队列 ] [-f 文件名 ] [-mldbv] 时间
at -c 作业 [ 作业 ...]
at 允许使用一套相当复杂的指定时间的方法,实际上是将 POSIX.2 标准扩展了。它可以接受在当天的 hh:mm (小时 : 分钟)式的时间指定。如果该时间已经过去,那么就放在 第二天执行。用户还可以采用 12 小时计时制,即在时间后面加上 AM (上午)或者 PM (下午)来说明是上午还是下午。可以指定命令执行的具体日期,指定格式为 month day (月 日)或者 mm/dd/yy (月 / 日 / 年)或者 dd.mm.yy (日 . 月 . 年)。指定的日期必须跟在指定时间 的后面。
上面介绍的都是绝对计时法,其实还可以使用相对计时法。 指定格式为: now + count time-units , now 就是当前时间, time-units 是时间单位,这里可以是 minutes (分钟)、 hours (小时)、 days (天)、 weeks (星期)。 count 是时间的数量,究竟是几天,还是几小时,等 等。还有一种计时方法就是直接使用 today (今天)、 tomorrow (明天)来指定完成命令的时间。
[例]指定在今天下午 5:30 执行某命令。假设现在时间是中午 12:30 , 2008 年 2 月 24 日,其命令格式如下:
at 5:30pm
at 17:30
at 17:30 today
at now + 5 hours
at now + 300 minutes
at 17:30 24.2.99
at 17:30 2/24/99
at 17:30 Feb 24
[例]
$at -f work 4pm + 3 days
在三天后下午 4 点执行文件 work 中的作业。
$at -f work 10am Jul 31
在 7 月 31 日上午 10 点执行文件 work 中的作业。
在任何情况下,超级用户都可以使用这个命令。对于其他用户来说,是否可以使用就取决于两个文件: /etc/at.allow和 /etc/at.deny 。如果 /etc/at.allow 文件存在的话,那么只有在其中列出的用户才可以使用 at 命令;如果该文件不存在,那么将检查 /etc/at.deny 文件是否存在,在这个文件中列出的用户均不能使用该命令。如果两个文件都不存在,那么只有超级用户可以使用该命令;空的 /etc/at.deny文件意味着所有的用户都可以使用该命令,这也是默认状态。
如果 at 命令是从一个使用 su 命令切换到用户 shell 中执行的,那么当前用户被认为是执行用户,所有的错误和输出结果都会送给这个用户。但是如果有邮件送出的话,收到邮件的将是原来的用户,也就是登录时 shell 的所有者。
at 命令中的参数
-V 将标准版本号打印到标准错误中。
-q queue 使用指定的队列。队列名称是由单个字母组成,合法的队列名可以由 a-z 或者 A-Z 。 a 队列是 at 命令的默认队列。
-m 作业结束后发送邮件给执行 at 命令的用户。
-f file 使用该选项将使命令从指定的 file 读取,而不是从标准输入读取。
-l atq 命令的一个别名。该命令用于查看安排的作业序列,它将列出用户排在队列中的作业,如果是超级用户,则列出队列中的所有工作。命令的语法格式如下 :atq [-V] [-q 队列 ][-v]
-d atrm 命令的一个别名。该命令用于删除指定要执行的命令序列,语法格式如下 :atrm [-V] 作业 [ 作业 ...]
-c 将命令行上所列的作业送到标准输出。
$ at 2:00 12/25/08
warning:command will be executed using /bin/sh.
提醒用户将使用哪个 shell 来执行该命令序列。 然后系统出现 at> 提示符,等待用户输入进一步的信息,也就是需要执行的命令序列:
at> find / -name “*.txt”|lpr
at> echo “foxy : All texts have been printed.You
can take them over.Good day!River” |mail -s ”job
done” foxy
输入完每一行指令然后回车,所有指令序列输入完毕后,使用组合键结束 at 命令的输入。这时候屏幕将出现如下信息:
job 1 at 2008-12-25 02:00
实际上如果命令序列较长或者经常被执行的时候,一般都采用将该序列写到一个文件中,然后将文件作为 at 命令的输入来处理。这样不容易出错。
[ 例 ] 找出系统中所有以 txt 为后缀名的文件,并且进行打印。打印结束后给用户 foxy 发出邮件通知取件。指定时间为十二月二十五日凌晨两点。
$at </tmp/aa 2:00 12/25/08
/tmp/aa 中的内容为
find / -name “*.txt” | lpr
echo “foxy:All texts have been printed. River” |mail -s
”JobDone” foxy
系统会在十二月二十五日凌晨两点查找系统中所有的扩展名为 txt 的文件打印,打印完毕给 foxy 发送一封邮件,在这里重定向符 < 可以使用 -f 参数
batch 命令
==================================================================
batch 用低优先级运行作业,该命令几乎和 at 命令的功能完全相同,唯一的区别在于, at 命令是在指定时间,很精确的时刻执行指定命令;而 batch 却是在系统负载较低,资源比较空闲的时候执行命令。该命令适合于执行占用资源较多的命令。
batch 命令的语法格式也和 at 命令十分相似,即batch [-V] [-q 队列 ] [-f 文件名 ] [-mv] [ 时间 ]
一般地说,不用为 batch 命令指定时间参数,因为 batch本身的特点就是由系统决定执行任务的时间,如果用户再指
定一个时间,就失去了本来的意义。具体的参数解释可以参考 at 命令。
$batch
at> find / -name *.txt|lpr
at> echo “foxy : All texts have been printed.You can take them over.Good day!River” |mail -s ”job done” foxy
所有指令序列输入完毕后,使用组合键结束 at 命令的输入 。
cron 命令
==================================================================
前面的 at 和 batch 命令都会在一定时间内完成一定任务,但是要注意它们都只能执行一次。也就是说,当指定了运行命令后,系统在指定时间完成任务,一切就结束了。但是在很多时候需要不断重复一些命令,这时候就可以使用 cron 命令来完成任务。
cron 命令在系统启动时就由一个 shell 自动启动,进入后台(所以不需要使用 & 符号)。
一般的用户没有运行该命令的权限,虽然超级用户可以手工启动 cron ,不过还是建议将其放到 shell 中由系统自行启动。
首先 cron 命令会搜索 /var/spool/cron 目录,寻找以 /etc/passwd 文件中的用户名命名的 crontab 文件,被找到的这种文件将载入内存。例如 /etc/passwd 中一个用户名为foxy 的用户,它所对应的 crontab 文件就应该 是 /var/spool/cron/foxy 。也就是说,以该用户命名的crontab 文件存放在 /var/spool/cron 目录下面。 cron 命令还将搜索 /etc/crontab 文件,这个文件是用不同的格式写成的。
cron 启动以后,它将首先检查是否有用户设置了 crontab文件,如果没有就转入“休眠”状态,释放系统资源。所以该后台进程占用资源极少。它每分钟“醒”过来一次,查看当前是否有需要运行的命令。命令执行结束后,任何输出都将作为邮件发送给 crontab 的所有者,或者是/etc/crontab 文件中 MAILTO 环境变量中指定的用户。
上面简单介绍了一些 cron 的工作原理,但是 cron 命令的执行不需要用户干涉;需要用户修改的是 crontab 中要执行的命令序列,所以下面介绍 crontab 命令。
crontab 命令
==================================================================
crontab 命令用于安装、删除或者列出用于驱动 cron 后台进程的表格。也就是说,用户把需要执行的命令序列放到rontab 文件中以获得执行。每个用户都可以有自己的rontab 文件。下面就来看看如何创建一个 crontab 文件。
在 /var/spool/cron 下的 crontab 文件不可以直接创建或者直接修改。 crontab 文件是通过 crontab 命令得到的。现在假设有个用户名为 foxy ,需要创建自己的一个 crontab文件。首先可以使用任何文本编辑器建立一个新文件,然后向其中写入需要运行的命令和要定期执行的时间。然后存盘退出。假设该文件为 /tmp/test.cron 。再后就是使用 crontab 命令来安装这个文件,使之成为该用户的crontab 文件。输入: crontab test.cron这样一个 crontab 文件就建立好了。可以转到 /var/spool/cron 目录下面查看,发现多了一个 foxy 文件。这个文件就是所需的 crontab 文件。
crontab 命令的语法格式
crontab [ -u user ] file
crontab [ -u user ] {-l|-r|-e}
第一种格式用于安装一个新的 crontab 文件,安装来源就是 file 所指的文件,如果使用“ -” 符号作为文件名,那就意味着使用标准输入作为安装来源。
-u 如果使用该选项,也就是指定了是哪个具体用户的crontab 文件将被修改。如果不指定该选项, crontab 将默认是操作者本人的 crontab ,也就是执行该 crontab 命令的用户的 crontab 文件将被修改。但是请注意,如果使用了 su 命令再使用 crontab 命令很可能就会出现混乱的情况。所以如果是使用了 su 命令,最好使用 -u 选项来指定究竟是哪个用户的 crontab 文件。
-l 在标准输出上显示当前的 crontab 。
-r 删除当前的 crontab 文件。
-e 使用 VISUAL 或者 EDITOR 环境变量所指的编辑器编辑当前的 crontab 文件。当结束编辑离开时,编辑后的文件将自动安装。
crontab 文件的格式说明 :
* 逗号 (',') 指定列表值。如 : "1,3,4,7,8"
* 中横线 ('-') 指定范围值 如 "1-6", 代表 "1,2,3,4,5,6"
* 星号 ('*') 代表所有可能的值
在 crontab 文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔,每个域当中有多个值的时候可以使用逗号来分隔。
# Use the hash sign to prefix a comment
# +------------ minute (0 - 59)
# | +---------- hour (0 – 23 , 00 点就是晚上 12 点 )
# | | +-------- day of month (1 - 31)
# | | | +------ month (1 - 12)
# | | | | +---- day of week (0 - 7) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
[例]
5,15,25,35,45,55 16,17,18 * * * command
这就是表示任意天任意月,其实就是每天的 16 点、 17 点、 18点的 5 min 、 15 min 、 25 min 、 35 min 、 45 min 、 55 min 时执行 command 命令。
[ 例 ] 每天每小时的 1 分执行用户目录下的 bin/account 这个指令:
1 * * * * bin/account
[例]
每天三点二十分执行用户目录下如下所示的两个指令 ( 每个指令以 ; 分隔 )
20 3 * * * (/bin/rm -f expire.ls logins.bad;bin/expire>expire.1st)
[ 例 ] 我们来看一个超级用户的 crontab 文件:
#Run the ‘atrun' program every minutes
#This runs anything that's due to run from ‘at’.See man ‘at’ or ‘atrun’.
0,5,10,15,20,25,30,35,40,45,50,55 * * * * /usr/lib/atrun
40 7 * * * updatedb
8,10,22,30,39,46,54,58 * * * * /bin/sync
如果需要改变其中的命令内容时,还是需要重新编辑原来的文件,然后再使用 crontab命令安装。
可以使用 crontab 命令的用户是有限制的。 如果 /etc/cron.allow 文件存在,那么只有 其中列出的用户才能使用该命令;如果该文件不存在但 cron.deny 文件存在,那么只有未列在该文件中的用户才能使用 crontab 命令;如果两个文件都不存在,那就取决于一些参数的设置,可能是只允许超级用户使用该命令,也可能是所有用户都可以使用该命令。
相关文章推荐
- linux系统下crontab 配置启动定时任务
- linux中Cron定时任务系统命令详解
- Linux-crontab命令工具设置定时任务用于执行DB2脚本
- linux crontab命令参数及用法详解--linux自动化定时任务cron
- Linux定时任务Crontab命令使用详解与总结
- Linux crontab定时执行任务 命令格式与详细例子
- Linux crontab定时执行任务 命令格式与详细例子
- 用linux中的crontab进行定时启动、清理任务
- Linux定时任务Crontab命令详解
- 定时自动启动任务crontab命令用法
- Linux下 crontab命令--定时任务
- 定时自动启动任务crontab命令用法
- Linux 设置定时任务crontab命令
- Linux Crontab 定时任务 命令详解
- Linux下的crontab定时、执行任务命令详解 oracle 自动备份
- Linux 下 Crontab 命令使用详解 定时任务
- linux定时启动程序的命令详解
- linux定时任务之crontab命令
- linux定时任务之crontab命令
- 定时自动启动任务crontab命令用法