后台执行命令
crontab 系统调度进程 ,循环执行的例行性命令
at at命令,特定时间运行特定作业
&后台提交作业 使用它在后台运行一个占用时间不长的进程
nohup命令提交作业 使用它在后台运行一个命令,即使在用户退出时也不受影响
计划任务 at cron
一种是例行性的,就是每隔一定的周期要办的事项。
一种是突发性的,就是这次做完以后就没有的那种
at 工作仅执行一次就从linux系统的任务分配中取消。cron 工作将持续做下去。
at 这个指令其实就是 atd 这个服务啦!所以请记得一定要启动这个服务呦! ntsysv 或/etc/init.d/atd restart和chkconfig --level 35 atd on
at 默认的工作记录文件放在/var/spool/at下面,在写入at记录文件后,该工作便进入任务分配中并且等待执行。当然要让/var/spool/at目录下面的工作实际运行,必须要启动我们上面提到的atd服务。 我们可以用/etc/at.allow与/etc/at.deny这两个文件来限制用户对at的使用。如果两个文件都不存在,那么只有root可以使用at命令。
查找的顺序:先找/etc/at.allow 这里写的才能用,这里面没写的不能用,即使没在at.deny里面写,但是如果没有/etc/at.allow文件,就去找at.deny这个文件,写在这里面的不能用,没在这里面的则能用。如果两个档案都不存在,那么只有 root 可以使用 at 这个指令。这和cron是一样的。默认他们都是没有白名单的,需要的话可以建,其实没有有都一样。
一旦一个作业被提交,at命令将会保留所有当前的环境变量,包括路径,不象crontab,只提供缺省的环境。该作业的所有输出都将以电子邮件的形式发送给用户,除非你对其输出进行了重定向,绝大多数情况下是重定向到某个文件中
at命令的基本形式为:
at [-f script] [-m -l -r] [time] [date]
其中,
-f script 是所要提交的脚本或命令。
-l 列出当前所有等待运行的作业。atq命令具有相同的作用。
-r 清除作业。为了清除某个作业,还要提供相应的作业标识( ID);有些unix变体只接受atrm作为清除命令。
-m 作业完成后给用户发邮件。
time at命令的时间格式非常灵活;可以是H、HH . HHMM、HH : MM或H:M,其中H和M分别是小时和分钟。还可以使用a.m.或p.m.。
date 日期格式可以是月份数或日期数,而且at命令还能够识别诸如today、tomorrow这样的词。
[test @test test]# at [-m] TIME (下达工作指令)
[test @test test]# atq (查看目前的工作排程)
[test @test test]# atrm [jobnumber] (删除排程)
-m 当at的工作完成后,以电子邮件的方式通知用户该工作已完成。
TIME 时间格式,这里定义什么时候进行at工作,TIME? :时间的格式,有底下几个:
HH:MM YYYY-MM-DD ex> 04:00 2002-05-30 (五月三十号四点执行)
HH[pm;am] + number [hours;days;weeks] ex> 4pm + 3 days (在过 3 天的下午 4 点)
HH:MM ex> 12:00 (今天的 12 点执行)
HH[pm;am] [Month] [Day] ex> 1pm May 30 jobnumber:每一个 at 工作排程都有编排的顺序!这个即是!
例: at now + 5 minutes
/bin/mail acb -s "test" < /root/tet.txt
在这里输入ctrl+d 就会出现,代表结束。
at 还可以在一个工作内输入多个命令。
at -m 参数来强制at给您自己传送一个电子邮件消息,表时执行完毕。
使用at命令提交作业有几种不同的形式,可以通过命令行方式,也可以使用 a t命令提示符。 一般来说在提交若干行的系统命令时,我使用 at命令提示符方式,而在提交shell脚本时,使用命令行方式。
如果想输入多条命令:at 时间 ---回车----输入命令-----CTRL+D
如果想提交一个脚本:at 3.00pm tomorrow -f /apps/bin/db_table.sh 意思是明天下午3点执行db_table.sh脚本。也是 at 时间 -f 脚本(最好绝对路径)
还可以使用echo命令向at命令提交作业:echo find /etc -name "root" -print | at now +1 minute
列出作业:at -l或atq 也可到/var/spool/at目录下看
清除一个作业
atrm [job on] 或 at -r [job no]
要清楚某个作业,首先要执行at -l命令,以获取相应的作业标识,然后对该作业标识使用at -r命令,请除该作业。
atrm job 3 就是清除3号作业
****************************************************************************************************************
cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业,有一个叫做crontab的命允许用户提交,编辑或删除相应的作业,每一个用户都可以有一个crontab文件来保存调度信息,可以使用他运行任意一个shell脚本或某个命令。时间自己定,每个用户都可以有自己的crontab文件,但在一个较大的系统中,系统管理员一般会禁止这些文件,而只在整个系统保留一个这样的文件。系统管理员通过cron.deny和cron.allow 这两个文件来禁止或允许用户拥有自己的crontab文件。
用户的设置: crontab ,用户可以自行建立例行性命令,为了安全,我们可以限制使用crontab的用户账号。/etc/cron.allow /etc/cron.deny 检查顺序先查白明单,不看黑名单
当用户使用crontab命令建立工作任务分配后,该项工作就会被记录到/var/spool/cron中。而且是以账号来识别。如abc用户,他的记录/var/spool/cron/abc里面。cron执行的每一项任务用户都会记录到/var/log/cron这个登陆文件中,所以如果linux不知道是否被植入木马时,了民可以搜索/var/log/cron登陆文件。
crontab [-u username] [ -l | -e | -r ]
-u 只有root才能执行这个任务,即帮其它用户建立/删除 crontab
-e 编辑crontab的工作内容
-l 查看ccrontab的工作内容
-r 删除crontab的工作内容
crontab -e
0 12 * * * mail abc -s "at 12:00" < /home/abc/test.txt
分 时 日 月 周 ----------------命令串-----------------------------------
这里周,0和7都表示星期天。
,表示分隔时段的意思,0 3,6 * * * command 表示3点和6点都适用。
- 表示一段时间范围,8点到12点每个10分钟执行一次。 10 8-12 * * * command
/n n代表数字,表示每隔n单位时间,例如每月分钟进行一次,则*/5 * * * * command 很简单,*与/5,也可以写成0-59、5,意思相同
30 4 1,15 * 5 每周5或者1号和15他们执行
* * 5 * * 意思是5点到6点,每分钟执行一次
* * * * * 每分钟
*/1 每分钟
不能写sbin下的命令,还有命令替换,$() ``
init====$PATH /etc/rc.d/rc.sys
其实这里学习的主要就是关于这个时间,其它要注意的就是脚本要绝对路径,
crontab -r 删除全部的工作
crontab 提交:可以直接编辑也可把一个写好的文件提交。
直接编辑,crontab [-u user] -e 打开编辑
提前写好一个文件提交,是把一个文件写好后,用crontab提交,如果,写了一个abc的文件,用crontab提交就是,crontab abc 这样就可以啦。
备份crontab, crontab -l > /root/mycron 这样误删除了,可以用文件提交的方法恢复。
crontab -e 是针对用户的cron来设计的,如果是系统的例行性任务,只要编辑/etc/crontab文件就可啦,其中crontab -e 中crontab其实是/usr/bin/crontab执行文件但/etc/crontab是一个纯文本文件。可以用户root身份编辑这个文件。
通常cron服务的最低检测限制是分钟,他会每分钟去读取一次/etc/crontab与/var/spool/cron中的数据内容. 每隔一分钟就去检查一次,所以最小精确为分钟
[root@localhost ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin 环境变量,一般默认就行
MAILTO=root 有错误或执行结果发给谁
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly root表示执行用户的身份
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
run-parts 表示后面接的/etc/cron.hourly 是一个目录内的所有可执行文件,表示多长时间执行一次,这个上目录下面的所有可执行文件。
一般的crontab文件支持两种,一种是目录规则类的,一种是命令规划类的
run-parts 就是代表一个文件的意思,目录
另外与crontab -e不同是的还多了一个用户级别的概念,意思是以谁的身份去执行
如果修改了某些条目或添加了新的条目,那么在保存该文件时, cron会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。
资源分配不均可以这样来做:
[root@test /root]# vi /etc/crontab
1,6,11,16,21,26,31,36,41,46,51,56 * * * * root ........? <==那个 .. 代表你的指令
2,7,12,17,22,27,32,37,42,47,52,57 * * * * root ........
3,8,13,18,23,28,33,38,43,48,53,58 * * * * root ........
4,9,14,19,24,29,34,39,44,49,54,59 * * * * root ........
nohup
执行一个进程,一个帐户退出后该进程还不会结束,哪就使用nohup。 nohup就是不挂起的意思(no hang up)
该命令的一般形式为: nohup command &
使用nohup命令提交作业
如果使用nohup命令提交作业,那么在缺省情况下该作业的所有输出都被重定向到一个名字为nohup.out的文件中,除非另外指定了输出文件。
nohup command > myout.file 2>&1 这样被重定向到myout.file文件中
如果希望一次提交多个作业,最好能够把它们写入到一个shell脚本文件中。