《LINUX与UNIX SHELL编程指南》读书笔记(三)
时间:2008-08-16 来源:hu200298
第 3 章 后台执行命令
1.cron
1) cron 是系统主要的调度进程,可以在无需人工干预的情况下运行作业,与 Windows 的"计划任务"类似。
2) cron 守护进程支持 crontab 和 at,用户可以通过这 2 个程序来实现定时调度作业。 2.crontab 命令允许用户提交、编辑或删除相应的作业。
1) 要想让 cron 来定时调度执行用户指定的程序,需要 2 个步骤:
① 按照 crontab 文件的格式创建用户的 crontab 文件。
② 使用 crontab 命令向 cron 提交用户的 crontab 文件。
2) 系统管理员可以通过设置/etc 目录下的 cron.deny 和 cron.allow 文件来禁止或允许用户使用 crontab。 3.创建用户的 crontab 文件:
1) crontab 文件由若干条记录组成,一条记录对应一个要运行的命令。注释行要在行首加#。
2) crontab 文件记录格式: 分<>时<>日<>月<>星期<>要运行的 CMD
① 时间用数字表示,其中星期用 0~6(0 表示星期天),小时用 1~23(0 表示子夜)
② <>表示空格,作为域分隔符,每一条记录必须含有 5 个时间域,而且每个域之间要用空分隔。
③ 在这些表示时间的域中,可以用横杠"-"来表示一个时间范围,可以使用逗号",",使用星号*来表示对某个表示时间的域没有特别的限定。例如,你希望星期一至星期五运行某个作业,那么可以在星期域使用"1-5"来表示。如果希望星期一和星期四运行某个作业,只需要使用"1,4"来表示。如果希望每天都运行某作业,应该在日域填入"*"。
④举例: echo "10 1 * * 6,0 /bin/find ~zqf -name \"core\" -exec rm {} \;" > zqf.cron
// 上面的例子创建了一个用户 crontab 文件 zqf.cron,表示每周六、周日的 1:10 运行一个 find 命令。
4.用户提交用户 crontab 文件:
1) Usage: crontab user_cronfile
2) 用户提交了 crontab 文件后,cron 会把用户 crontab 文件中的内容添加到/var/spool/cron 目录下一个与用户名同名的文件中,用户第一次使用 cron 之前不存在/var/spool/cron 目录下的同名文件。
3) 举例: crontab zqf.cron
// 用户 zqf 执行此命令后,cron 将 zqf.cron 中的内容添加到文件/var/spool/cron/zqf 中
4)crontab Usage: crontab [-u USERNAME] [-e -l -r]
① -u USERNAME : 编辑指定用户名的 crontab 文件。
② -e : 直接编辑 crontab 文件/var/spool/cron/。
③ -l : 列出 crontab 文件/var/spool/cron/中的内容。
④ -r : 删除/var/spool/cron/文件。 4.at 允许用户向 cron 守护进程提交作业,使其在指定的稍后时间运行。
1) 一旦一个作业被提交,at 命令将会保留所有当前的环境变量,包括路径,不象 crontab 只提供缺省的环境。该作业的所有输出都将以电子邮件的形式发送给用户,除非你对其输出进行了重定向,绝大多数情况下是重定向到某个文件中。
2) 和 crontab 一样,系统管理员可以通过/etc 目录下的 at.allow 和 at.deny 文件来控制哪些用户可以使用at 命令。一般来说,对 at 命令的使用不如对 crontab 的使用限制那么严格。
3) 向 at 提交一个作业后,at 将为该作业分配一个唯一的作业号,进入 at 的队列,作业运行后退出队列。
4) 提交给 at 的作业,只能在指定的时间运行一次,不能象 crontab 那样周期性运行。 5.向 at 提交作业
1) 命令行方式: 一般在提交 shell 脚本时,使用命令行方式。
① Usage: at -f SCRIPT_FILE [-m] TIME
② SCRIPT_FILE : 是脚本文件名,可以把要提交给 at 的作业写到脚本文件中,然后提交给 at。
③ -m : 作业完成后给用户发邮件。
③ TIME : 指定作业将要执行的时间。TIME 的格式很灵活。 2) 交互方式: 在交互方式下,要提交的作业直接从控制台输入。
① Usage: at [-m] TIME
② 在命令行下执行"at TIME"命令后,就进入 at 命令提示符( at> )状态,在 at 提示符状态下可以输入
shell 命令,一行输入一条 shell 命令,可以输入多行,最后按"Ctrl+D"退出。
③ 举例: $ at 21:10
at> find / -name "passwd" -print
at> // 表示"Ctrl+D" 6.TIME : 作业被指定的时间,at 的时间格式很灵活,时间粒度可以是时分、月日年。常见的格式有:
1) HH:MM : 这是最普遍的格式。比如 21:30、9:15 等
2) am 和 pm : 比如 10am、4pm、9:25pm 等
3) MMDDYY 和 MM/DD/YY: 比如 9:30pm 022005、11:50 02/20/2005 等
4) tomorrow 和 today : 比如 10pm today、21:30 tomorrow 等
5) now +N uint : unit 为时间单位,可以是 minutes(min minute)、hours(hour) days(day)
比如 now+3min、now +2days、now +12hours 等
6) +N unit : 比如 9pm +2days、11:30 +4min 等 7.at 的其它操作
1) 查看中已提交到 at 队列等待运行的作业: at -l 或 atq
2) 取消还未运行的作业: at -r job_number 或 atrm job_number 8.&命令 把作业放到后台执行
1) 当在前台运行某作业时,终端被该作业占据,用户不能使用终端;而把作业放在后台运行就不会占据终端。
2) 当在后台执行作业时,用户可以继续使用终端做其他事情。但是作业在后台运行一样会将结果输出到屏幕
上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某
个文件中。比如 command >out_file 2>&1 &
4) 适合后台运行的作业是那些非交互式的作业。需要用户交互的命令不要放在后台执行,否则系统就会始终等待用户的输入。 9.向后台提交作业
1)Usage: CMD &
2)举例: find /etc -name "*.conf" -print >find.dt 2>&1 & 10.nohup nohup 命令可以在你退出帐户之后继续运行相应的后台进程
1) Usage: nohup CMD &
2) 如果使用 nohup 命令提交后台作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out 的文件中,除非另外指定了输出文件。
3)举例: nohup find / -name "*.tmp" -print > /root/tmp.fnd 2>&1 &
1.cron
1) cron 是系统主要的调度进程,可以在无需人工干预的情况下运行作业,与 Windows 的"计划任务"类似。
2) cron 守护进程支持 crontab 和 at,用户可以通过这 2 个程序来实现定时调度作业。 2.crontab 命令允许用户提交、编辑或删除相应的作业。
1) 要想让 cron 来定时调度执行用户指定的程序,需要 2 个步骤:
① 按照 crontab 文件的格式创建用户的 crontab 文件。
② 使用 crontab 命令向 cron 提交用户的 crontab 文件。
2) 系统管理员可以通过设置/etc 目录下的 cron.deny 和 cron.allow 文件来禁止或允许用户使用 crontab。 3.创建用户的 crontab 文件:
1) crontab 文件由若干条记录组成,一条记录对应一个要运行的命令。注释行要在行首加#。
2) crontab 文件记录格式: 分<>时<>日<>月<>星期<>要运行的 CMD
① 时间用数字表示,其中星期用 0~6(0 表示星期天),小时用 1~23(0 表示子夜)
② <>表示空格,作为域分隔符,每一条记录必须含有 5 个时间域,而且每个域之间要用空分隔。
③ 在这些表示时间的域中,可以用横杠"-"来表示一个时间范围,可以使用逗号",",使用星号*来表示对某个表示时间的域没有特别的限定。例如,你希望星期一至星期五运行某个作业,那么可以在星期域使用"1-5"来表示。如果希望星期一和星期四运行某个作业,只需要使用"1,4"来表示。如果希望每天都运行某作业,应该在日域填入"*"。
④举例: echo "10 1 * * 6,0 /bin/find ~zqf -name \"core\" -exec rm {} \;" > zqf.cron
// 上面的例子创建了一个用户 crontab 文件 zqf.cron,表示每周六、周日的 1:10 运行一个 find 命令。
4.用户提交用户 crontab 文件:
1) Usage: crontab user_cronfile
2) 用户提交了 crontab 文件后,cron 会把用户 crontab 文件中的内容添加到/var/spool/cron 目录下一个与用户名同名的文件中,用户第一次使用 cron 之前不存在/var/spool/cron 目录下的同名文件。
3) 举例: crontab zqf.cron
// 用户 zqf 执行此命令后,cron 将 zqf.cron 中的内容添加到文件/var/spool/cron/zqf 中
4)crontab Usage: crontab [-u USERNAME] [-e -l -r]
① -u USERNAME : 编辑指定用户名的 crontab 文件。
② -e : 直接编辑 crontab 文件/var/spool/cron/。
③ -l : 列出 crontab 文件/var/spool/cron/中的内容。
④ -r : 删除/var/spool/cron/文件。 4.at 允许用户向 cron 守护进程提交作业,使其在指定的稍后时间运行。
1) 一旦一个作业被提交,at 命令将会保留所有当前的环境变量,包括路径,不象 crontab 只提供缺省的环境。该作业的所有输出都将以电子邮件的形式发送给用户,除非你对其输出进行了重定向,绝大多数情况下是重定向到某个文件中。
2) 和 crontab 一样,系统管理员可以通过/etc 目录下的 at.allow 和 at.deny 文件来控制哪些用户可以使用at 命令。一般来说,对 at 命令的使用不如对 crontab 的使用限制那么严格。
3) 向 at 提交一个作业后,at 将为该作业分配一个唯一的作业号,进入 at 的队列,作业运行后退出队列。
4) 提交给 at 的作业,只能在指定的时间运行一次,不能象 crontab 那样周期性运行。 5.向 at 提交作业
1) 命令行方式: 一般在提交 shell 脚本时,使用命令行方式。
① Usage: at -f SCRIPT_FILE [-m] TIME
② SCRIPT_FILE : 是脚本文件名,可以把要提交给 at 的作业写到脚本文件中,然后提交给 at。
③ -m : 作业完成后给用户发邮件。
③ TIME : 指定作业将要执行的时间。TIME 的格式很灵活。 2) 交互方式: 在交互方式下,要提交的作业直接从控制台输入。
① Usage: at [-m] TIME
② 在命令行下执行"at TIME"命令后,就进入 at 命令提示符( at> )状态,在 at 提示符状态下可以输入
shell 命令,一行输入一条 shell 命令,可以输入多行,最后按"Ctrl+D"退出。
③ 举例: $ at 21:10
at> find / -name "passwd" -print
at> // 表示"Ctrl+D" 6.TIME : 作业被指定的时间,at 的时间格式很灵活,时间粒度可以是时分、月日年。常见的格式有:
1) HH:MM : 这是最普遍的格式。比如 21:30、9:15 等
2) am 和 pm : 比如 10am、4pm、9:25pm 等
3) MMDDYY 和 MM/DD/YY: 比如 9:30pm 022005、11:50 02/20/2005 等
4) tomorrow 和 today : 比如 10pm today、21:30 tomorrow 等
5) now +N uint : unit 为时间单位,可以是 minutes(min minute)、hours(hour) days(day)
比如 now+3min、now +2days、now +12hours 等
6) +N unit : 比如 9pm +2days、11:30 +4min 等 7.at 的其它操作
1) 查看中已提交到 at 队列等待运行的作业: at -l 或 atq
2) 取消还未运行的作业: at -r job_number 或 atrm job_number 8.&命令 把作业放到后台执行
1) 当在前台运行某作业时,终端被该作业占据,用户不能使用终端;而把作业放在后台运行就不会占据终端。
2) 当在后台执行作业时,用户可以继续使用终端做其他事情。但是作业在后台运行一样会将结果输出到屏幕
上,干扰你的工作。如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某
个文件中。比如 command >out_file 2>&1 &
4) 适合后台运行的作业是那些非交互式的作业。需要用户交互的命令不要放在后台执行,否则系统就会始终等待用户的输入。 9.向后台提交作业
1)Usage: CMD &
2)举例: find /etc -name "*.conf" -print >find.dt 2>&1 & 10.nohup nohup 命令可以在你退出帐户之后继续运行相应的后台进程
1) Usage: nohup CMD &
2) 如果使用 nohup 命令提交后台作业,那么在缺省情况下该作业的所有输出都被重定向到一个名为nohup.out 的文件中,除非另外指定了输出文件。
3)举例: nohup find / -name "*.tmp" -print > /root/tmp.fnd 2>&1 &
相关阅读 更多 +