Linux – 后台执行命令

我们在用手机看电影的时候,有时候经常会被短信或者APP更新弹出的窗口干扰在Linux上也一样,当你在终端或者控制台工作的时候,不希望在自己做事的时候,被突然的作业占住屏幕。或者有一些密集访问磁盘的进程,希望可以在非复核高峰时间段运行。这时候,我们就希望这些进程能够在后台运行。

 

在这种情况下,我们有几种选择:

cron : 系统调度进程。可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。

at : at命令。使用它在一个特定的时间运行一些特殊的作业,或在晚一些的非负荷高峰时间段或高峰负荷时间段运行。

& : 使用它在后台运行一个占用时间不长的进程。

nohup : 使用它在后台运行一个命令,即使在用户退出时也不受影响。

 

cron 和 crontab

cron 是系统主要的调度进程,可以在无需人工干预的情况下运行作业。crontab允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。可以使用它运行任意一个shell脚本或某个命令,每小时运行一次,或一周三次,这都可以定制。但是在一个较大的系统中,系统管理员一般都会禁止这些文件,只在整个系统保留一个这样的文件。这些是通过cron.deny和cron.allow这两个文件来禁止或者允许用户拥有自己的crontab文件。

 

/etc/cron.allow : 将可以使用crontab的账号写入其中,若不在这个文件内的使用者则不可使用crontab

/etc/cron.deny : 将不可以使用crontab的账号写入其中,若未记录到这个文件中的使用者,就可以使用crontab

 

crontab [-u username] [-l|-e|-r]

-u:只有root才能进行这个任务,帮其他使用者创建/删除crontab

-e:编辑crontab的工作内容

-l:查询crontab的工作内容

-r:移除crontab的工作内容

 

当进入crontab的编辑,就会进入vi的编辑画面,然后一个工作一行来编辑,编辑完成之后,用[:wq]来保存并退出vi。每项工作的格式为[分钟小时 日期 月份 周 要运行的命令]

 

注意:当表示周的时候,0|7都代表星期天,还有一些辅助的字段:

 

当使用crontab运行shell脚本时,要由用户来给出脚本的绝对路径,设置相应的环境变量。不要预先设定cron知道所需要的特殊环境,用户要保证在shell脚本中提供所有必要的路径和环境变量。

如果不小心误删了crontab文件,可以在自己的$HOME路径下找一下,备份文件一般会保存在该路径下。

 

at命令

at命令运行用户向cron提交作业,使其在稍后的实际运行。这里稍后的实际可能是10分钟,也可能是几天。

一旦一个作业被提交,at命令会保留当前所有的环境变量,包括路径,不像crontab,只提供缺省的环境。

和crontab一样,root可以通过/etc/at.allow和/etc/at.deny来控制哪些用户可以使用at命令,对这两个文件来说,at的工作情况如下:

1.  先寻找/etc/at.allow这个文件,写在这个文件中的使用者才能使用at,没有写在这个文件中的使用者不能使用at(即便不写在at.deny中)

2.  如果没有/etc/at.allow就寻找/etc/at.deny这个文件,若写在这个at.deny的使用者则不能使用at,没有在这个at.deny文件中的使用者,就可以使用at(前提是at.allow这个文件不存在)

3.  如果两个文件都不存在,则之后root可以使用at

以上,其实我们在系统预设都可以使用at这个前提下,只需要有一个at.deny文件就能进行权限控制。

 

at 的基本语法:

at [-f script] [-m|-l|-r] [time] [date]

-f script : 要提交的脚本或命令。

-l : 列出当前所有等待运行的作业。

-r : 清除作业。需要提供相应的作业标识(ID)。

-m : 作业完成后给业务发邮件。

-time : at命令的时间格式很灵活;可以是H、HH.HHMM、HH:MM或H:M,甚至还能使用a.m.或p.m.。

date : 日期格式可以是月份数或日期数,at命令还能识别诸如today,tomorrow这样的值。

在这里,还是建议最好使用绝对路径来下达指令,不会出问题。

 

&命令

当需要将某一个命令在后台执行,我们可以使用命令 &的形式将其放到后台执行。

比如:command > out.file 2>&1 &

所有标准输出和错误输出都会被重定向到一个out.file的文件中,当你提交之后,就会显示出一个进程号,可以用它来监控该进程,或者杀死它。

 

nohup命令

如果你在运行一个进程,但是在你退出账户时该进程还不会结束,那么可以使用nohup(no hang up)命令。该命令可以在你退出账户知乎继续运行相应的进程。

这个命令的一般形式为:

nohup command &

例如:nohup command > myout.file 2 > &1

nohup中可以使用管道符号,所以可以一次提交多个命令,当然也可以将多个命令写入一个shell脚本,用nohup命令来执行它。

 

以上的命令都可以使系统管理任务变得很轻松。

 最后还有一个好用的工具screen,这个可以参考一下之前的转载Linux:用Screen管理你的远程会话

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值