進程管理相關命令(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。
相關文章
相關標籤/搜索