Skip to content

Shell control

腳本控制

產生信號

  • 中斷進程

ctrl+C會產生SIGINT信號,並將其發送給當前shell的所有進程,提前終止命令

  • 暫停進程

ctrl+Z會生成SIGTSTP訊號,停止shell中運行的所有進程

捕獲信號

trap信號可以指定shell需要偵測並攔截的linux信號

trap commands signals

任務調度

在linux中,任務調度優先級指的為內核對程序分配的CPU時間,從最高優先(-20)到最低優先(19),默認bash以優先度0級啟動所有進程

  • nice

nice命令允許在啟動時設定其優先度

nice -n 10 ./jobcontrol.sh
nice命令會阻止普通用戶提高命令的優先級,只有root或特權用戶才能提高

  • renice

修改系統中已運行命令的優先級,renice可以透過PID進行修改

定時運行作業

  • at

at命令允許Linux系統何時運行腳本,該命令會將作業提交到列隊中,指定shell何時運行

at [ -f filename ] time
time選項指定了在何時運行該作業,若指定時間已過去,那麼at指令會在第二天同一時刻運行

time可以指定時間如下 * 標準小時與分鐘,例如10:15 * AM/PM指示符,例如10:15PM * 特定時間,比如 now, noon, midnight或teatime * 標準日期如MMDDYY、MM/DD/YY * 文本日期,如Jul 4或Dec 25 * 時間增量如now+25 minutes

atq 列出等待的作業

atrm刪除等待中的作業

需要定期運行的腳本

若腳本需要固定在每天,每周或每月的同一時間運行,與其頻繁用at,不如用cron

  • cron
minutepasthour hourofday dayofmonth month dayofweek command 

cron允許使用特定值、取值範圍(1~5)或者通符(*)來指定各個字段

例子:如果想在每天的10:15運行一個命令

15 10 * * * command

  • cron時間表

每個用戶都可以使用自己的cron時間表,linux提供了crontab命令來處理cron時間表

crontab -l

  • cron目錄 cron的基礎目錄共有四個:hourly, daily, monthly和weekly
ls /etc/cron.*ly
  • anacron

如果運行時間已到,但系統是關閉的,那麼cron便會跳過並不執行,anacron確保系統啟動後作業一定會運行

anacron命令如下

period delay identifier command

預設shell啟動腳本

可以將腳本放在預設目錄,當用戶作登入等動作時會啟動的預設腳本 * $HOME/.bash_profile * $HOME/.bash_login * $HOME/.profile

每次啟動新shell,bash shell都會運行.bashrc