Linux通過Crontab實現(xiàn)自啟動的全流程
前言
本文主要記錄通過crontab實現(xiàn)當服務(wù)器宕機或服務(wù)意外停止時進行自動重啟
一、Crontab實現(xiàn)重啟流程
1.配置階段
1.1.任務(wù)定義??
用戶通過crontab -e編輯任務(wù)文件,按分鐘 小時 日 月 周 命令格式編寫規(guī)則(如*/1 * * * * /opt/script.sh表示每1分鐘執(zhí)行一次腳本)
1.2.特殊符號說明
* :匹配所有值 ,:多值分隔(如1,3,5表示1、3、5分鐘) -:范圍(如0-6表示0到6點) /:間隔(如*/10表示每10分鐘)
1.3.正則簡介
1.3.1.基本元字符
| 元字符 | 說明 | 示例 |
|---|---|---|
| . 匹配任意單個字符(除換行符 \n) | a.c → abc, a@c | |
| \d | 匹配數(shù)字(等價于 [0-9]) | \d\d → 42 |
| \D | 匹配非數(shù)字(等價于 [^0-9]) | \D+ → abc |
| \w | 匹配單詞字符(字母、數(shù)字、下劃線) | \w+ → user_1 |
| \W | 匹配非單詞字符(如 !, @) | \W → ! |
| \s | 匹配空白字符(空格、制表符 \t、換行符 \n 等) | a\sb → a b |
| \S | 匹配非空白字符 | \S+ → Hello |
| […] | 匹配括號內(nèi)的任意一個字符 | [aeiou] → a, e |
| [^…] | 匹配不在括號內(nèi)的任意字符 | [^0-9] → a, ! |
1.3.2.量詞(重復(fù)匹配)
| 量詞 | 說明 | 示例 |
|---|---|---|
| * | 匹配前一個字符 0 次或多次 | a*b → b, aaab |
| + | 匹配前一個字符 1 次或多次 | a+b → ab, aaab |
| ? | 匹配前一個字符 0 次或 1 次 | a?b → b, ab |
| {n} | 匹配前一個字符 恰好 n 次 | a{3} → aaa |
| {n,} | 匹配前一個字符 至少 n 次 | a{2,} → aa, aaa |
| {n,m} | 匹配前一個字符 n 到 m 次 | a{2,4} → aa, aaa |
1.3.3.位置錨點
| 錨點 | 說明 | 示例 |
|---|---|---|
| ^ | 匹配字符串的開始 | ^Hello → Hello world 中的 Hello |
| $ | 匹配字符串的結(jié)束 | world$ → Hello world 中的 world |
| \b | 匹配單詞邊界 | \bcat\b → cat(不匹配 category) |
| \B | 匹配非單詞邊界 | \Bcat\B → category 中的 cat |
1.3.4.分組與捕獲
| 語法 | 說明 | 示例 |
|---|---|---|
| (…) | 捕獲分組,提取匹配內(nèi)容 | (ab)+ → abab(捕獲 ab) |
| (?:…) | 非捕獲分組,僅分組不捕獲 | (?:ab)+ → abab(不捕獲) |
| | | 或邏輯,匹配左側(cè)或右側(cè) | cat |
| \1, \2 | 反向引用,引用捕獲的分組 | (\d)\1 → 11, 22 |
1.3.5.零寬斷言(高級匹配)
| 斷言 | 說明 | 示例 |
|---|---|---|
| (?=…) | 正向先行斷言,匹配后面是 … 的位置 | \d+(?=px) → 2(在 2px 中) |
| (?!..) | 負向先行斷言,匹配后面不是 … 的位置 | \d+(?!px) → 3(在 3em 中) |
| (?<=…) | 正向后行斷言,匹配前面是 … 的位置 | (?<=$)\d+ → 100(在 $100 中) |
| (?<!..) | 負向后行斷言,匹配前面不是 … 的位置 | (?<!$)\d+ → 50(在 €50 中) |
1.3.6.常見用例
① 郵箱驗證
^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$
匹配:user@example.com
不匹配:user@.com
② URL 提取
https?://[^\s/$.?#].[^\s]* 匹配:https://example.com/path
③ 日期匹配(YYYY-MM-DD)
^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$
匹配:2023-12-31
不匹配:2023-13-40
④ 手機號(中國大陸)
^1[3-9]\d{9}$
匹配:13812345678
1.3.7.正則表達式修飾符
| 修飾符 | 說明 | 示例 |
|---|---|---|
| i | 忽略大小寫 | /hello/i → Hello |
| g | 全局匹配(匹配所有結(jié)果) | /a/g → a a a 中的 3 個 a |
| m | 多行模式(^ 和 $ 匹配每行的開頭/結(jié)尾) | /^a/m → 匹配多行中的 a |
1.4.正式配置
步驟一:
執(zhí)行 crontab -e命令
步驟二:
點擊字母“i” 輸入下方指令:
方案一:監(jiān)聽端口 每隔X時間去判斷是否啟動狀態(tài):
*/1 * * * * source /etc/profile && ss -ntpl |grep 8080 |grep -v grep || sh /啟動腳本完整路徑/啟動腳本.sh 后面跟啟動腳本的完整啟動命令
輸入后 點擊“esc” 點擊后點擊“ crtl + : ”, 輸入wq保存退出。
方案二:每天定時重啟(晚上10點):
0 22 * * * source /etc/profile && cd /啟動腳本完整路徑 && sh /啟動腳本完整路徑/腳本.sh restart 后面跟啟動腳本的完整啟動命令
配置完成保存后可通過crontab -l命令驗證
1.5.任務(wù)執(zhí)行流程??
時間匹配??
crond每分鐘遍歷所有任務(wù),對比當前時間與任務(wù)的時間表達式
環(huán)境加載?
執(zhí)行時繼承系統(tǒng)環(huán)境變量(如PATH),建議腳本內(nèi)顯式加載/etc/profile或~/.bash_profile
任務(wù)執(zhí)行
執(zhí)行對應(yīng)監(jiān)聽任務(wù)
二、Crontab命令詳解
2.1.基本命令
| 命令 | 說明 |
|---|---|
| crontab -e | 編輯當前用戶的 cron 任務(wù)表(使用默認編輯器,如 vim 或 nano) |
| crontab -l | 列出當前用戶的所有 cron 任務(wù) |
| crontab -r | 刪除當前用戶的所有 cron 任務(wù)(謹慎使用,無確認?。?/td> |
| crontab -u <用戶名> -e | 編輯指定用戶的 cron 任務(wù)(需 root 權(quán)限) |
| crontab -u <用戶名> -l | 列出指定用戶的 cron 任務(wù) |
| crontab -u <用戶名> -r | 刪除指定用戶的所有 cron 任務(wù) |
2.2.查看 cron 日志(調(diào)試)
2.2.1.系統(tǒng)日志(檢查 cron 是否執(zhí)行):
grep CRON /var/log/syslog # Ubuntu/Debian grep CRON /var/log/cron # CentOS/RHEL
2.2.2.如果任務(wù)未執(zhí)行,檢查服務(wù)是否運行:
systemctl status cron # Ubuntu/Debian systemctl status crond # CentOS/RHEL
2.3.Cron 時間格式
編輯 crontab -e 時,每行任務(wù)格式如下:
* * * * * <要執(zhí)行的命令>
2.3.1.五個時間字段的含義(從左到右):
分鐘(0-59)
小時(0-23)
日期(1-31)
月份(1-12)
星期(0-7,0 和 7 均代表周日)
2.3.2.特殊符號:
*:任意值(每分鐘/每小時等)
,:分隔多個時間(如 1,15 * * * * 表示每小時的 1 分和 15 分)
-:范圍(如 10-20 * * * * 表示每小時的 10 到 20 分)
*/n:每隔 n 單位(如 */5 * * * * 表示每 5 分鐘)
2.4.示例
1.每天凌晨 3 點執(zhí)行腳本
0 3 * * * /path/to/script.sh
2.每 5 分鐘執(zhí)行一次
*/5 * * * * /path/to/command
3.每周一和周五的下午 5:30 發(fā)送郵件
30 17 * * 1,5 /usr/bin/sendmail -t < /tmp/email.txt
4.每月 1 號的凌晨 1 點重啟服務(wù)
0 1 1 * * systemctl restart nginx
2.5.注意事項
1.環(huán)境變量問題:cron 默認使用最小環(huán)境變量,建議在腳本中使用絕對路徑或提前設(shè)置 PATH。
2.輸出處理:cron 任務(wù)的輸出會以郵件發(fā)送給用戶,如需忽略輸出:
* * * * * /path/to/command >/dev/null 2>&1
3.權(quán)限限制:普通用戶只能編輯自己的 cron 任務(wù),root 可管理其他用戶的任務(wù)。
2.6.備份與恢復(fù)
2.6.1.備份
crontab -l > ~/cron_backup.txt
2.6.2.恢復(fù)
crontab ~/cron_backup.txt
以上就是Linux通過Crontab實現(xiàn)自啟動的全流程的詳細內(nèi)容,更多關(guān)于Linux Crontab自啟動的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在Ubuntu 24.04(Noble)上配置阿里源的操作步驟
在使用 Ubuntu 系統(tǒng)時,選擇一個快速且穩(wěn)定的軟件源(Repository)對于系統(tǒng)更新和軟件安裝至關(guān)重要,阿里云提供的 Ubuntu 鏡像源在國內(nèi)用戶中非常受歡迎,本文將介紹如何在 Ubuntu 24.04 (Noble) 上配置阿里源,需要的朋友可以參考下2025-07-07
ubuntu+php環(huán)境下的Memcached 安裝方法
Memcached是一套分散式的高速緩存系統(tǒng),當初是Danga Interactive為了LiveJournal所發(fā)展2011-11-11
Xshell5連接虛擬機中的Linux的方法以及失敗原因解決
這篇文章主要介紹了Xshell5連接虛擬機中的Linux的方法以及失敗原因解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
Linux環(huán)境實現(xiàn)替換jar包中class文件
文章介紹了如何通過替換class文件來避免重復(fù)打包的問題,具體步驟包括查找目標文件目錄、解壓目標文件、替換已解壓文件、替換jar包文件等2025-11-11
linux分析服務(wù)器內(nèi)存常用命令與查找文件工作路徑方式
文章介紹了如何使用`auditd`服務(wù)查看內(nèi)存使用情況,并通過`ps`命令按內(nèi)存使用排行,此外,還說明了通過進程的工作目錄(cwd)來定位文件位置,從而確定服務(wù)的具體位置2025-10-10
ubuntu 設(shè)置靜態(tài)IP的實現(xiàn)方法
這篇文章主要介紹了ubuntu 靜態(tài)IP的設(shè)定實現(xiàn)方法的相關(guān)資料,需要的朋友可以參考下2016-10-10

