shell后台执行命令
概述
让程序在后台运行,而不再终端屏幕上运行
- con,系统调度进程,在一周或者一月的不同时间段上来运行,
- at,在一个特殊的时间运行一些特殊的命令,
- &,在后台运行一个占用时间不长的命令
- nohub,使用他在后台运行一个命令,即使用户退出也不熟影响
cron和crontab
每一个用户都可以有一个crontab文件来保存调度信息。
crontab文件域
第1列 分钟 1 ~ 5 9
第2列 小时 1 ~ 2 3 ( 0 表示子夜)
第3列 日1 ~3 1
第4列 月1 ~1 2
第5列 星期0~6(0表示星期天)
第6列 要运行的命令
-表示时间范围,1-5
,来表示和,1,4
*表示连续的时间段,或者对域没有特别的限定
crontab命令
Crontab [-u user] -e -l -r
# -u用户名
# -e编辑crontab文件,crontab文件是一个系统文件,通过这种方式会用系统默认的编辑器打开
# -l列出crontab文件中的内容
# 删除crontab文件
创建contab文件
# 创建名为<usr>cron的文件,如devcron
# 创建名为devcron的文件
crontab devcron
at命令
at [-f script] [-m -l -r] [time] [date]
- -f script 是所要提交的脚本或命令。
- -l 列出当前所有等待运行的作业。atq命令具有相同的作用。
- -r 清除作业。为了清除某个作业,还要提供相应的作业标识(ID);有些UNIX变体只接受atrm作为清除命令。at -r [job num]或者atrm [job num]
- -m 作业完成后给用户发邮件。
- time at命令的时间格式非常灵活;可以是H、HH.HHMM、HH:MM或H:M,其中H和M分别是小时和分钟。还可以使用a.m.或p.m.。
- date 日期格式可以是月份数或日期数,而且at命令还能够识别诸如today、tomorrow这样的词。
&命令
命令用法
当前台运行某个作业时,终端被占据;而在后台运行某个作业时,它就不会占据终端。&命令用作吧作业放到后台去执行。
# 如下命令将后台的运行命令的结果和错误都输出到out.file文件中
command >out.file 2>&1 &
与ps和kill命令搭配使用
# 通过ps查找相应进程
ps
# 通过kill杀死相关进程
kill -signal [process_number]
ps命令
选项:
- a:显示现行终端机下的所有进程,包括其他用户的进程;
- u:显示进程拥有者、状态、资源占用等的详细信息(注意有“-”和无“-”的区别);
- x:显示没有控制终端的进程。通常与 a 这个参数一起使用,可列出较完整信息;
- -e:显示所有进程;
- -f:完整输出显示进程之间的父子关系;
- -l:较长、较详细的将该 PID 的的信息列出;
- -o:自定义显示的字段;
nohub
如果你正在运行一个进程,而且你觉得在退出帐户时该进程还不会结束,那么可以使用nohup命令。该命令可以在你退出帐户之后继续运行相应的进程。Nohup就是不挂起的意思(nohangup)。
nohup command &
# 重定向输出
nohup command > myout.file 2>&1