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

