进程管理相关命令(16)

命令(14个)shell

bg,fg,jobs,kill,killall,pkill,crontab,pstree,nice/renice,nohup,runlevel,service,at
vim

&windows

16.1.(bg,fg,job)bash

功能:
app

A,Shell支持做用控制,有如下命令:
ide

1. command& 让进程在后台运行
测试

2. jobs 查看后台运行的进程
spa

3. fg %n 让后台运行的进程n到前台来
命令行

4. bg %n 让进程n到后台去; 
3d

PS:"n"为jobs查看到的进程编号.

 

总结:
fg、bg、jobs、&、ctrl + z都是跟系统任务有关的,虽然如今基本上不怎么须要用到这些命令,但学会了也是很实用的
一。& 最常常被用到
这个用在一个命令的最后,能够把这个命令放到后台执行
二。ctrl + z
能够将一个正在前台执行的命令放到后台,而且暂停
三。jobs
查看当前有多少在后台运行的命令
四。fg
将后台中的命令调至前台继续运行
若是后台中有多个命令,能够用 fg %jobnumber将选中的命令调出,%jobnumber是经过jobs命令查到的后台正在执行的命令的序号(不是pid)
五。bg
将一个在后台暂停的命令,变成继续执行
若是后台中有多个命令,能够用bg %jobnumber将选中的命令调出,%jobnumber是经过jobs命令查到的后台正在执行的命令的序号(不是pid)
 
#Linux下使用Shell命令控制任务Jobs执行
下列命令能够用来操纵进程任务:
ps 列出系统中正在运行的进程;
kill 发送信号给一个或多个进程(常常用来杀死一个进程);
jobs 列出当前shell环境中已启动的任务状态,若未指定jobsid,则显示全部活动的任务状态信息;若是报告了一个任务的终止(即任务的状态被标记为Terminated),shell 从当前的shell环境已知的列表中删除任务的进程标识;
bg 将进程搬到后台运行(Background);
fg 将进程搬到前台运行(Foreground);

16.2.(kill,killall,pkill)

16.3.crontab

功能:相似于windows计划任务的一个命令,功能很是强大

依赖于crond后台进程

语法:crontab [-u user] file

          crontab [-u user] [-l | -r | -e] [-i] [-s]

经常使用选项:

-u:用户名,只有root用户才能进行任务,建立、修改、删除

-e:编辑crontab文件

-l:查看crontab文件内容

-r:删除crontab文件

安装:

yum install cronie

crontab的域

下面就是这些域:


第1列分钟1~5 9

第2列小时1~2 3(0表示子夜)

第3列日1~3 1

第4列月1~1 2

第5列星期0~6(0表示星期天)

第6列要运行的命令


下面是crontab的格式:

分< >时< >日< >月< >星期< >要运行的命令

其中< >表示空格。

示例:

 

30 21* * * /apps/bin/cleanup.sh
说明:表示每晚的2 1 : 3 0运行/apps/bin/cleanup.sh
0 5,17 * * * /scripts/script.sh
说明:天天 5:00和17:00执行任务
* * * * *  /scripts/script.sh
说明:每分钟执行一次任务,一般状况下,没有每分钟都须要执行的脚本
*/10 * * * * /scripts/monitor.sh
说明:每 10min 执行一次任务
* * * jan,may,aug * /script/script.sh
说明:在特定的某几个月执行任务
0 17 * * sun,fri /script/scripy.sh
说明:在每周5、周日的17点执行任务
0 2 * * sun  [ $(date +%d) -le 07 ] && /script/script.sh
说明:在某个月的第一个周日执行任务
0 */4 * * * /scripts/script.sh
说明:每四个小时执行一个任务
0 4,17 * * sun,mon /scripts/script.sh
说明:每周1、周日执行任务
* * * * * /scripts/script.sh
* * * * *  sleep 30; /scripts/script.sh
说明:每一个30秒执行一次任务由于最小的是1min。能够另辟蹊径
* * * * * /scripts/script.sh; /scripts/scrit2.sh
说明:多个任务在一条命令中配置
@yearly /scripts/script.sh
说明:每一年执行一次任务,@yearly 相似于“0 0 1 1 *”。它会在每一年的第一分钟内执行,一般咱们能够用这个发送新年的问候。每一年每个月天天每分也能够这样写,得测试下
@reboot /scripts/script.sh
说明:系统重启时执行
45 4 1,10,22 * * /apps/bin/backup.sh
说明:表示每个月一、十、22日4:45运行/apps/bin/backup.sh
10 1 * * 6,0 /bin/find -name "core" -exec rm {} \;
说明:表示每周6、周日的1 : 1 0运行一个find命令
0,30 18-23 * * * /apps/bin/dbcheck.sh
说明:表示在天天1 8 : 0 0至2 3 : 0 0之间每隔3 0分钟运行/apps/bin/dbcheck.sh
0 23 * * 6 /apps/bin/qtrend.sh
说明:表示每星期六的23点运行 /apps/bin/qtrend.sh
crontab -e
添加或更新crontab中的命令
crontab -u username -e
须要编辑其余用户的命令集合,须要使用到以下的命令
crontab -l
查看当前系统登陆用户的Crontab命令集合
crontab -u username -l
查看其余用户的Crontab命令集合

访问控制:
/etc/cron.deny 只拒绝
/etc/cron.allow 默认不存在,能够本身建立
若是cron.deny和cron.allow文件冲突,谁优先?本身测试

问题:
若是crontab -e 写了一个天天晚上6:30关机的任务;当尚未到晚上6:30我手动关机了,次日会不会当我开机后隔一段时间自动关机?
若是我把关机的命令写成一个脚本放到 /etc/cron.daily/里,当我手动关机后,次日开机会不会自动关机?

16.4.pstree

16.5.nice/renice

16.6.nohup

功能:把当前命令行运行的进程放到后台,以致于退出窗口进程不会退出。

语法: nohup command &

示例:

16.7.runlevel

16.8.service

16.9.at

功能:crontab实现的是定时执行任务,特定任务运行一次,就须要用到at

一次性计划任务,依赖于atd后台进程

语法:at [-f script] [-m -l -r] [time] [date]

命令格式:

at 3:30pm

at 15:30

at now

at now +1min

at 4:30pm tomorrow

at 13:00 +3days

at -t 05201430

at -t 201708081530

复杂的任务能够放到脚本里执行:

at 时间格式 -f xxx.sh

经常使用选项:

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

-d 删除计划任务 等于atrm

-c 查看任务内容

-l:列出任务。等于atq

-r:清除任务。为了清除某个任务,还要提供相应的任务标识( I D);有些U N I X变体只接受a t r m做为清除命令。

-m:任务完成后给用户发邮件。

time:at命令的时间格式很是灵活;能够是H、H H . H H M M、H H : M M或H : M,其中H和M分别是小时和分钟。还可使用a . m .或p . m .。

date:日期格式能够是月份数或日期数,并且a t命令还可以识别诸如t o d a y、t o m o r r o w这样的词。

示例:

 

# rpm -q at  查看软件是否安装
at-3.1.10-43.el6_2.1.x86_64

# rpm -ql at  查看软件所带来的文件列表
/etc/at.deny 控制列表文件,拒绝该文件里的使用at服务; at.allow默认不存在,本身建立,只容许该文件里的人使用
/etc/pam.d/atd 验证机制
/etc/rc.d/init.d/atd 启动脚本
/etc/sysconfig/atd 子配置文件
/usr/bin/at 二进制命令
/usr/bin/atq 查看任务列表
/usr/bin/atrm 删除任务
/usr/bin/batch 以低优先级去建立任务
/usr/sbin/atd 二进制的命令

# /etc/init.d/atd start
# chkconfig atd on
# service atd status  查看服务的运行状态
atd (pid  2188) is running...
# chkconfig --list|grep atd  开机自动启动
atd                0:off    1:off    2:off    3:on    4:on    5:on    6:off

一、提示符方式
# su sam
$ at 10:40
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
at> find /etc -name "passwd" -print
at> <EOT>
job 1 at 2004-11-02 10:40
说明:< E O T >就是< C T R L - D >。在10:40系统将执行一个简单的f i n d命令。提交的任务被分配了一个惟一标识job 1。该命令在完成之后会将所有结果以邮件的形式发送给我。

下面这些日期/时间格式都是a t命令能够接受的:
at 5.00am May23
at 11.20pm
at now +2 hour
at 9am tomorrow
at 15:00 May24
at now + 10 minutes

二、命令行方式
若是但愿向a t命令提交一个s h e l l脚本,使用其命令行方式便可。在提交脚本时使用- f选项。
如:
$ touch db_table.sh
$ at 3:00pm tomorrow -f db_table.sh
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
job 3 at 2004-11-02 15:00
d b _ t a b l e . s h的脚本将在2004-11-02 15:00运行

三、还可使用e c h o命令向a t命令提交任务
$ echo find /etc -name "passwd" -print | at now +1 minute
warning: commands will be executed using (in order) a) $SHELL b) login shell c) /bin/sh
job 4 at 2004-11-01 19:07
列出所提交的任务
一个任务被提交后,可使用at -l命令来列出全部的任务:
$ at -l
1      2004-11-02 10:40 a sam
3      2004-11-02 15:00 a sam
4      2004-11-01 19:07 a sam
其中,第一行是任务标识,后面是任务运行的日期/时间。最后一列a表明a t。
还可使用a t q命令来完成一样的功能,它是a t命令的一个连接。
直接>atq,至关于>at -l

当提交一个任务后,它就被拷贝到/ v a r / s p o o l / a t目录中,准备在要求的时间运行。
# pwd
/var/spool/at
# ls -l
清除一个任务

清除任务的命令格式为:
atrm [job no] 或at -r [job no]

要清除某个任务,首先要执行at -l命令,以获取相应的任务标识,而后对该任务标识使用at -r 命令,清除该任务。
$ at -l
1      2004-11-02 10:40 a sam
3      2004-11-02 15:00 a sam
4      2004-11-01 19:07 a sam
$at -r 3
$at -l
1      2004-11-02 10:40 a sam
4      2004-11-01 19:07 a sam
有些系统使用at-r [job no]命令清除任务。

# at 14:18 072414        --定时的时间 后面是14年7月24号
at> echo "haha" > /dev/pts/5
at> <EOT>            --ctrl+d结束
job 1 at 2014-07-24 14:18    --job 1表示一个编号,我这里是系统的第一次at任务因此为1.后面是定时的时间

若是你要作的事步骤比较多,则先写成脚本,而后调用
at -f xxx.sh

# vim /tmp/1.sh
#!/bin/bash

echo 1 > /dev/pts/5
echo 2 > /dev/pts/5
echo 3 > /dev/pts/5

[root@li ~]# at now + 1 minutes -f /tmp/1.sh
job 2 at 2014-07-24 14:26
[root@li ~]# at now + 1 hours -f /tmp/1.sh
job 3 at 2014-07-24 15:25
[root@li ~]# at now + 1 days -f /tmp/1.sh
job 4 at 2014-07-25 14:25
[root@li ~]# at now + 1 months -f /tmp/1.sh
job 5 at 2014-08-24 14:25
[root@li ~]# at now + 1 years -f /tmp/1.sh
job 6 at 2015-07-24 14:25

# at now +1min
at> wall "hello world"
at> <EOT>
ctrl+d 结束输入
job 1 at 2016-04-11 10:23


# at 14:00 +3 days
at> echo hello > /tmp/test.at
at> <EOT>
ctrl+d 结束输入

ls /var/spool/at 目录里存放的是全部at服务的计划任务
# ls /var/spool/at/
a0000201737408  spool

cat a0000201737408 等于 at -c 2 查看任务内容
# at -d 2 或者atrm 删除任务 那么/var/spool/at/里面相对应的脚本文件删了
若是想修改job内容,直接修改脚本文件就能够

vim useradd.sh
#!/bin/bash
for i in 1 2 3
do
  useradd u0$i
  echo user is ok >>/tmp/test.at
done

chmod +x useradd.sh

at now -f /root/useradd.sh

测试验证
at服务的访问控制
/etc/at.deny 默认只拒绝该文件里的用户
/etc/at.allow 默认没有,若是存在,只容许在at.allow文件里的用户使用
若是at.deny和at.allow冲突,at.allow 容许优先

16.10.&

功能:命令放入后台执行

示例:

 

查找名为“httpd.conf”的文件,并把全部标准输出和错误输出重定向到f i n d . d t的文件中:
# find /etc/httpd/ -name "httpd.conf" -print >find.dt 2>&1 &
[2] 7832
[1]   Done                    find /etc/ -name "httpd.conf" -print >find.dt 2>&1 &
成功提交该命令以后,系统给出了它的进程号7832。
相关文章
相关标签/搜索