linux如何通過(guò)crontab命令定時(shí)執(zhí)行shell腳本
前言
由于網(wǎng)安要對(duì)公司服務(wù)器進(jìn)行安防測(cè)試活動(dòng),因此需要對(duì)測(cè)試環(huán)境服務(wù)器上的服務(wù)進(jìn)行定時(shí)啟停,避免端口被網(wǎng)安誤傷 需求為測(cè)試服務(wù)器早上9點(diǎn)linux自動(dòng)啟動(dòng)后臺(tái)服務(wù),晚上8點(diǎn)半自動(dòng)停止后臺(tái)服務(wù)
項(xiàng)目經(jīng)理提示使用linux的crontab指令實(shí)現(xiàn)
一、查看系統(tǒng)是否安裝crontab命令
直接輸入 crontab -l 查詢當(dāng)前用戶的定時(shí)任務(wù)
crontab -l
若出現(xiàn)command not found 則表示需要安裝crontab
注:
- vim /etc/crontab 命令可以查詢當(dāng)前系統(tǒng)下的定時(shí)任務(wù),同樣可以使用。
- 與crontab -e 的區(qū)別一個(gè)是用戶級(jí)一個(gè)是系統(tǒng)級(jí),系統(tǒng)級(jí)編輯文件會(huì)有語(yǔ)法提示。
編寫(xiě)啟動(dòng)服務(wù)和停止服務(wù)的shell腳本
二、創(chuàng)建crontab定時(shí)任務(wù)執(zhí)行shell腳本
執(zhí)行 crontab -e 會(huì)打開(kāi)當(dāng)前用戶的定時(shí)任務(wù)工作表
如果沒(méi)有定時(shí)任務(wù)打開(kāi)就是一個(gè)空的 VI 編輯界面
在里面添加自己的定時(shí)任務(wù)
到這里定時(shí)任務(wù)就已經(jīng)創(chuàng)建完了,如果出現(xiàn)shell腳本無(wú)法執(zhí)行的問(wèn)題,可能是環(huán)境變量的問(wèn)題,或者是相對(duì)路徑的問(wèn)題等等
三、讓定時(shí)任務(wù)執(zhí)行后打印日志記錄一下
1.直接讓定時(shí)任務(wù)啟動(dòng)的項(xiàng)目日志重定向到指定日志目錄
例如:
30 23 * * * /path/to/shell/script.sh >> /path/to/log/file 表示每晚的23:30執(zhí)行/path/to/shell/script腳本, 并且把項(xiàng)目啟動(dòng)日志重定向輸出到/path/to/log/file文件。
2.在shell腳本里額外輸出自定義日志
例如:
。。。項(xiàng)目啟動(dòng)shell腳本內(nèi)容。。。 #此處獲取系統(tǒng)時(shí)間不同方法可以實(shí)現(xiàn)多種格式 time=$(date) echo $time"-----XXX服務(wù)已定時(shí)啟動(dòng)" >> /path/log/crontablog.log
這樣會(huì)把每次啟停的時(shí)間和是否執(zhí)行記錄到 crontablog.log 文件中。(若不存在.log文件則會(huì)自動(dòng)創(chuàng)建并寫(xiě)入,后續(xù)記錄會(huì)追加寫(xiě)入),此方式更靈活
四.問(wèn)題解決
手動(dòng)執(zhí)行能打印日志,定時(shí)任務(wù)執(zhí)行無(wú)日志輸出
原因:
是某些命令無(wú)法使用crontab調(diào)用,因?yàn)橛脩舻顷慙inux操作系統(tǒng)的時(shí)候,/etc/profile, ~/.bash_profile等配置文件會(huì)被自動(dòng)執(zhí)行,所以手動(dòng)執(zhí)行腳本能夠成功,但是crontab執(zhí)行失敗
解決辦法:
- 1.在shell腳本開(kāi)頭添加
. /etc/profile . ~/.bash_profile
#!/bin/bash # Destription: test cpu usage # Example : sh cpu_usage.sh consume 8 | sh cpu_usage.sh release #must have load env for crontab . /etc/profile . ~/.bash_profile #...... #...... date_time=$(date +"%Y-%m-%d %H:%M:%S")
- 2.日志輸出采用絕對(duì)路徑
function release() { for pid in $(ps -ef |grep /bin/bash |grep -v grep |awk '{print $2}' |xargs) do echo $date_time"--release cpu pid: "$pid >> /data01/temp/cpu_crontab_log.log kill -9 $pid done }
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
keepalived實(shí)現(xiàn)nginx高可用
這篇文章主要為大家詳細(xì)介紹了keepalived實(shí)現(xiàn)nginx高可用,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10-bash:/usr/bin/yum:沒(méi)有那個(gè)文件或目錄的解決方案
在CentOS系統(tǒng)中,不慎刪除或卸載了yum可以通過(guò)重新安裝來(lái)恢復(fù),首先,確認(rèn)系統(tǒng)版本,例如CentOS,然后新建所需目錄以存放下載的文件,接下來(lái),分別從鏡像源下載yum組件和python依賴的rpm包,安裝python時(shí),如果遇到依賴問(wèn)題,可選擇強(qiáng)制安裝2024-10-10詳解如何在Linux(CentOS 7)命令行模式安裝VMware Tools
本篇文章主要介紹了如何在Linux(CentOS 7)命令行模式安裝VMware Tools,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-03-03linux mint 18虛擬機(jī)下設(shè)置1080P分辨率的方法
下面小編就為大家?guī)?lái)一篇linux mint 18虛擬機(jī)下設(shè)置1080P分辨率的方法。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12CentOS服務(wù)器apache綁定多個(gè)域名的方法
這篇文章主要為大家詳細(xì)介紹了CentOS服務(wù)器apache綁定多個(gè)域名的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11CentOS 開(kāi)機(jī)啟動(dòng)自定義腳本詳解及實(shí)現(xiàn)
這篇文章主要介紹了CentOS 開(kāi)機(jī)啟動(dòng)自定義腳本的相關(guān)資料,有些時(shí)候我們需要在服務(wù)器里設(shè)置一個(gè)腳本,讓他一開(kāi)機(jī)就自己?jiǎn)?dòng),需要的朋友可以參考下2016-11-11