tft每日頭條

 > 圖文

 > linux如何開機執行腳本

linux如何開機執行腳本

圖文 更新时间:2024-11-24 16:21:11

Linux 是通過信号來實現進程間通信的,所以我們編寫腳本時,可以通過捕捉特定的信号來控制Shell腳本的操作。下面簡單列舉一下常見的Linux 信号

linux如何開機執行腳本(後台模式運行Linux腳本以及腳本執行自動化)1

生成信号

Linux 允許用鍵盤組合鍵生成兩種基本的Linux信号,

1.中斷(terminating)進程

Ctrl C 生成SIGINT 信号,并發送給當前 Shell 中運行的所有進程。這是我們強行終止Shell 進程常用的方法。

2.暫停(stopping)進程

Ctrl Z 生成SIGTSTP 信号,并發送給當前Shell 中運行的所有進程。

捕獲信号

腳本可以通過 ' trap '命令來捕獲信号,命令格式為:

trap commands signal1 signal2...

linux如何開機執行腳本(後台模式運行Linux腳本以及腳本執行自動化)2

從上圖上可以看出,通過 trap 捕獲了SIGINT 信号,并在捕獲是打印消息。

輸出結果為:

linux如何開機執行腳本(後台模式運行Linux腳本以及腳本執行自動化)3

從輸出結果看出,我在第5秒和第8秒後,通過組合鍵 Ctrl C,觸發了 SIGINT 信号。

EXIT 信号

EXIT 信号在腳本退出時生成,也可以在腳本中通過 trap 來捕獲。

删除信息捕獲

捕獲某個信号并執行邏輯後,希望解除信号捕獲,trap 命令也提供了方法

trap -- signals #删除signal 的信号捕獲。

後台模式運行腳本

我們在終端啟動腳本,但有時腳本運行時間比較久,那麼終端就無法處理其他交互,這種情況時,我們可以讓腳本在後台運行,終端可以立即返回進行其他交互。

以後台模式運行腳本非常簡單,隻要在腳本啟動命令後面加上 '&' 符号即可。例如:

./my_script &

非控制台下運行腳本

有時我們需要後台運行的腳本在終端退出後仍然執行,那麼就需要一個命令 'nohup'。

nohup ./my_script.sh &

通過該命令啟動腳本後,當終端發過來SIGHUP信号時,腳本會忽略該信号。因為nohup 會将腳本進程與終端解除關聯,所以腳本進程也就不再和STDOUT & STDERR關聯了,nohup會将腳本的STDOUT&STDERR 重定向到nohup.out文件中。

重啟停止的Job

上面我們講過,通過Ctrl Z可以停止運行的腳本任務,停止後我們可以選擇kill掉,如果我們希望停止的任務繼續進行,如何操作呢?通過 ‘bg’命令可以重啟停止的任務。格式為

bg (job_id) #重啟對應job_id的job

linux如何開機執行腳本(後台模式運行Linux腳本以及腳本執行自動化)4

從上圖看出,我在腳本 "t16.1"中做了循環處理,當運行到第2次循環時,我停止了腳本,通過 jobs命令查看到腳本處于停止狀态,通過 bg 命令,重啟Job, 腳本繼續執行。此處 bg 沒有填寫 job id, 那麼命令會重啟默認job, 默認 Job 會在 job id 旁邊标識 “ ”,此例中隻包含一個默認job,所有隻需要輸入 bg 命令即可。

調整腳本運行優先級

Linux内核負責将CPU時間按照優先級分配給不同的進程,Linux中優先級從-20(最高優先級)到 19(最低優先級),默認以0 啟動所有進程。通過 nice 命令可以調整優先級,格式為

nice -n pri_level ./my_script # pri_level為優先級級别

linux如何開機執行腳本(後台模式運行Linux腳本以及腳本執行自動化)5

上圖中以優先級為11啟動dash 進程,可以看到,NI 列中 dash 優先級為11。

renice 命令: 調整已運行命令的優先級。格式為

renice -n pri_level -p PID #修改進程PID的優先級。

Schedule Job

at 命令可以指定Linux 何時運行腳本。格式為

at [-f filename] time

at 命令會将Job保存到/var/spool/at 中,at的守護進程 atd 會定時去文件中讀取schedule job,并按照計劃時間執行,從而實現linux 上的 Schedule Job。at 命令支持的時間格式比較豐富,主要包括;

linux如何開機執行腳本(後台模式運行Linux腳本以及腳本執行自動化)6

查看所有計劃任務命令:‘apt‘., 删除 schedule job:: at rm line_num, 舉例:

linux如何開機執行腳本(後台模式運行Linux腳本以及腳本執行自動化)7

cron 時間表

cron 是一種特殊的時間表示格式:

min hour dayofmonth month dayofweek command

cron 可以用來實現定時計劃。舉例cron:

  • 15 10 * * * command 表示每天10:15分執行 command.
  • 15 10 * * 1 command 表示每周一10:15分執行command

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关圖文资讯推荐

热门圖文资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved