Linux定時執行.sh腳本
因為測試ffmpeg推流用flv方式的話沒有做自動斷流,所以要先用.sh腳本來執行關流,降低CPU和其他資源佔用
首先編寫.sh文件
#! /bin/bash echo "kill ffmpeg is start..." killall -9 ffmpeg echo "kill ffmpeg is ok!"
開頭是指此腳本使用/bin/bash來解釋執行。
接下來是輸出執行開始,執行殺死指定名字的所有進程 ,然後輸出執行完成
將.sh文件保存為killffmpeg.sh並保存在linux服務器上,我這裡的路徑為/root/test/,注意,windows下保存腳本可能會有問題,因為:
Windows下換行符號是「\r\n」
回車符是Carriage Return, C語言中是’\r’ 換行符是Line Feed, C語言中是’\n’ 回車換行符實際是兩個字符, 就是\r\n;
而linux下是「\n」沒有」\r」;
執行以下命令
sed -i 's/\r$//' ./killffmpeg.sh
並且賦予.sh腳本執行權限,777是最高權限,根據自己的需要來修改,可以使用ll ./文件名來查看執行權限
chmod 777 ./killffmpeg
接下來我們嘗試執行已下已經編寫好的腳本
可以看到,因為沒有正在拉推的流所以輸出了未找到進程,這是正常情況
但是我們光有腳本還不行,我們需要定時任務執行器crontab
先檢查一下是否安裝了crontab
我安裝的操作系統是CentOS8.4所以使用systemctl ,有的朋友是service這樣,注意一下
systemctl status crond.service
可以看到CentOS8.4已經預安裝了cron,並且是enable狀態
如果沒有安裝的朋友可以參考這篇博客
https://blog.csdn.net/hukai0q/article/details/83380951
可以使用yum來安裝
然後就可以配置任務了,修改/etc/crontab 然後在最下面一行添加任務也可以,注意腳本文件的路徑是絕對路徑,可以用pwd命令來查看
[root@localhost cron]# vi/etc/crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts */1 * * * * root /root/test/killffmpeg.sh
文件/etc/crontab中每行任務的描述格式如下:
minute hour day month dayofweek command
minute – 從0到59的整數
hour – 從0到23的整數
day – 從1到31的整數 (必須是指定月份的有效日期)
month – 從1到12的整數 (或如Jan或Feb簡寫的月份)
dayofweek – 從0到7的整數,0或7用來描述周日 (或用Sun或Mon簡寫來表示)
command – 需要執行的命令(可用as ls /proc >> /tmp/proc或 執行自定義腳本的命令)
每一分鐘執行 */1 * * * *
每小時執行 0 * * * *
每天執行 0 0 * * *
每周執行 0 0 * * 0
每月執行 0 0 1 * *
每年執行 0 0 1 1 *
root表示以root用戶身份來運行
run-parts表示後面跟着的是一個文件夾,要執行的是該文件夾下的所有腳本
對於以上各語句,星號(*)表示所有可用的值。例如*在指代month時表示每月執行(需要符合其他限制條件)該命令。
整數間的連字號(-)表示整數列,例如1-4意思是整數1,2,3,4
指定數值由逗號分開。如:3,4,6,8表示這四個指定整數。
符號「/」指定步進設置。「/<interger>」表示步進值。如0-59/2定義每兩分鐘執行一次。步進值也可用星號表示。如*/3用來運行每三個月份運行指定任務。
以「#」開頭的為注釋行,不會被執行。
-
星號(*) :代表所有可能的值,例如,month字段如果是星號,則表示在滿足其它字段的制約條件後,每月都執行該命令操作;
-
逗號(,) :可以用逗號隔開的值,指定一個多元素的列表,例如:1,2,5,7,8,9
-
中杠(-) :可以用整數之間的中杠表示一個整數範圍,例如「2-6」表示:2,3,4,5,6
-
正斜線(/) :可以用正斜線指定時間的間隔頻率,例如「0-23/2」表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鐘執行一次
crontab -l
如果報:no crontab for root
主要原因是由於這個liunx服務器 第一次使用 crontab ,還沒有生成對應的文件導致的,執行了 編輯(crontab -e)後就生成了這個文件
crontab -e
直接編輯添加一行,注意這裡不需要加root,保存退出即可
*/1 * * * * /root/test/killffmpeg.sh
crontab -e配置是針對某個用戶的,而編輯/etc/crontab是針對系統的任務
crontab -l //列出當前的所有調度任務
crontab -l -u jp //列出用戶jp的所有調度任務
crontab -r //刪除所有任務調度工作
一般情況保存退出後就已經存在任務列表了,可以使用crontab -l 來進行查看,如果還沒有的話可以重新載入或者重啟crontab來刷新任務列表
systemctl reload crond.service
systemctl restart crond.service
再次執行crontab -l 可以看到剛才添加的任務已經存在了
crontab的默認日誌路徑在/var/log/cron
我們使用命令查看
tail -f /var/log/cron
可以看到,我們的定時任務已經成功執行並輸出了執行結果
至此,配置定時執行.sh腳本完成