linux之Cron定時(shí)任務(wù)使用及說(shuō)明
本文將從Cron的基本概念和語(yǔ)法入手,逐步介紹更復(fù)雜的調(diào)度策略和實(shí)際應(yīng)用場(chǎng)景,幫助您全面理解Cron服務(wù)的工作原理,學(xué)會(huì)如何創(chuàng)建、管理和調(diào)試Cron定時(shí)任務(wù)。
Cron的基本原理和組成
什么是Cron?
- Cron是Linux和Unix系統(tǒng)中用于定時(shí)執(zhí)行任務(wù)的程序。
- 它允許用戶在指定時(shí)間自動(dòng)執(zhí)行腳本、命令或軟件。
- Cron非常適合定期執(zhí)行的任務(wù),如數(shù)據(jù)備份、系統(tǒng)更新等。
Cron的工作原理
- Cron的工作基于
crontab(Cron table)文件,這是一個(gè)配置文件,里面包含了一系列的命令和它們對(duì)應(yīng)的執(zhí)行時(shí)間。 - 每個(gè)用戶在其主目錄下都可以有自己的crontab文件,此外,還有一個(gè)系統(tǒng)級(jí)的crontab文件,用于管理員設(shè)置的任務(wù)。
- Cron守護(hù)進(jìn)程會(huì)定時(shí)檢查這些crontab文件,解析里面定義的時(shí)間和命令,并在指定時(shí)間執(zhí)行這些命令。
Cron的組成部分
Cron守護(hù)進(jìn)程:
- 這是一個(gè)常駐后臺(tái)的程序,負(fù)責(zé)定時(shí)檢查、調(diào)度和執(zhí)行crontab文件中指定的任務(wù)。
Crontab文件:
- 用戶級(jí)crontab:每個(gè)用戶可以通過(guò)
crontab -e命令編輯自己的任務(wù)計(jì)劃。這些任務(wù)只對(duì)當(dāng)前用戶有效。 - 系統(tǒng)級(jí)crontab:位于
/etc/crontab,通常由系統(tǒng)管理員管理,可以執(zhí)行系統(tǒng)級(jí)任務(wù)。
Crontab語(yǔ)法:
- Crontab文件中的每行都包括六個(gè)字段,
- 分別表示分鐘、小時(shí)、日期、月份、星期和要執(zhí)行的命令。
Cron表達(dá)式
為了更好地理解Cron如何工作,下面是一個(gè)簡(jiǎn)單的Crontab文件示例:
# .---------------- minute # | .------------- hour # | | .---------- day of month # | | | .------- month # | | | | .---- day of week (Sunday=0 or 7) # | | | | | # * * * * * user-name command to be executed 指定Cron作業(yè)需要執(zhí)行的具體命令或腳本路徑 30 04 * * * root /path/to/daily_backup.sh
這個(gè)示例中的任務(wù)配置表示:在每天4:30,系統(tǒng)會(huì)以root用戶的身份執(zhí)行daily_backup.sh腳本。
重要
請(qǐng)確保所有命令行指令或腳本文件均使用絕對(duì)路徑進(jìn)行配置。
字段取值
下表為Cron表達(dá)式中五個(gè)字段的取值范圍和支持的特殊字符。
| 字段名稱 | 是否必填 | 可接受的范圍 | 特殊字符使用 |
|---|---|---|---|
| 分鐘 | 是 | \[0, 59\] | *,-,/ |
| 小時(shí) | 是 | \[0, 23\] | *,-,/ |
| 日 | 是 | \[1, 31\] | *,-,/,?,L,W |
| 月 | 是 | \[1, 12\]或英文月份簡(jiǎn)稱\[JAN, DEC\] | *,-,/ |
| 星期 | 是 | 默認(rèn)遵循 Unix 的 \[0,6\](0=SUN, 6=SAT),但支持 7 作為 SUN 的別名。 | *,-,/,?,L,# |
特殊字符含義與示例
| 特殊字符 | 含義 | 示例 |
|---|---|---|
| * | 匹配該字段的任意值。 | 0 * * * * command每小時(shí)的第0分鐘執(zhí)行。 |
| - | 表示范圍。 | 0 1-3 * * * command每天的1點(diǎn)到3點(diǎn)每小時(shí)執(zhí)行。 |
| / | 用來(lái)指定時(shí)間的間隔。 | */15 * * * * command每15分鐘執(zhí)行一次。 |
| ? | 可用于日或星期字段,表示“無(wú)特定值”。 | 0 0 2 ? * * command每月2號(hào)執(zhí)行,星期不指定。 |
| L | 可用于日或星期字段,表示“最后一天”。 | 0 0 L * * command每月的最后一天執(zhí)行。 |
| W | 僅用于日字段,表示最接近指定日期的工作日。 | 0 0 15W * * command最接近每月15號(hào)的工作日?qǐng)?zhí)行。 |
| # | 用于星期字段,表示“該月的第幾個(gè)星期幾”。 | 0 0 * * 3#2 command每月的第二個(gè)星期三執(zhí)行。 |
說(shuō)明
使用L參數(shù)時(shí),請(qǐng)避免指定列表或范圍。這是因?yàn)榻Y(jié)合L與其他范圍或列表可能導(dǎo)致解析錯(cuò)誤或邏輯沖突。
實(shí)用Cron表達(dá)式
| Cron 表達(dá)式 | 含義 | 適用背景 |
|---|---|---|
| * * * * * | 每分鐘執(zhí)行一次任務(wù)。 | 用于測(cè)試和驗(yàn)證Cron配置是否正確激活和執(zhí)行。 |
| 0 0 * * * | 每天00:00執(zhí)行一次任務(wù)。 | 適用于每日重置或備份服務(wù)器數(shù)據(jù),確保數(shù)據(jù)安全。 |
| 0 2 * * * | 每天2:00執(zhí)行一次。 | |
| 0 1 * * * | 每天1:00執(zhí)行一次。 | |
| 0 6 * * * | 每天6:00執(zhí)行任務(wù)。 | 適用于早晨更新數(shù)據(jù)報(bào)表,供團(tuán)隊(duì)成員查看最新信息。 |
| 0 12 * * * | 每天12:00執(zhí)行任務(wù)。 | 用于企業(yè)中執(zhí)行中午數(shù)據(jù)同步或發(fā)送日常提醒郵件。 |
| 0 18 * * 1-5 | 周一至周五的18:00執(zhí)行任務(wù)。 | 適合業(yè)務(wù)結(jié)束前的數(shù)據(jù)備份,確保所有當(dāng)日數(shù)據(jù)得到保存。 |
| 0 21 * * * | 每天21:00執(zhí)行任務(wù)。 | 適用于商業(yè)運(yùn)營(yíng)結(jié)束后清理系統(tǒng)或備份當(dāng)日交易數(shù)據(jù)。 |
| 0 0 1 * * | 每月的第一天00:00執(zhí)行任務(wù)。 | 適用于月初自動(dòng)產(chǎn)生財(cái)務(wù)、銷售或其他業(yè)務(wù)報(bào)告。 |
| 0 0 1 1,7 * | 每年的1月1日和7月1日?qǐng)?zhí)行任務(wù)。 | 用于執(zhí)行半年度數(shù)據(jù)歸檔或組織結(jié)構(gòu)調(diào)整等重要任務(wù)。 |
| 15 14 1 * * | 每月第一天的14:15執(zhí)行任務(wù)。 | 用于監(jiān)控和更新IT系統(tǒng)的安全補(bǔ)丁,確保系統(tǒng)安全性。 |
| 0 0 * * 0 | 每周日00:00執(zhí)行任務(wù)。 | 適用于執(zhí)行周末數(shù)據(jù)清理和優(yōu)化,為新周準(zhǔn)備干凈的環(huán)境。 |
| 0 0 1 1 * | 每年1月1日?qǐng)?zhí)行任務(wù)。 | 適用于年初自動(dòng)執(zhí)行重要的年度啟動(dòng)腳本,如系統(tǒng)重置或重要數(shù)據(jù)歸檔。 |
| */10 * * * * | 每10分鐘檢查一次系統(tǒng)狀態(tài)。 | 適用于關(guān)鍵系統(tǒng)或服務(wù)的持續(xù)監(jiān)控,確保性能和可靠性。 |
更多Cron參考請(qǐng)?jiān)斠姡?a rel="external nofollow" target="_blank">https://crontab.guru/
Cron差異對(duì)比
主流操作系統(tǒng)對(duì)比
基本特性對(duì)比
| 特性 | Linux/Unix Cron | macOS Cron | BSD Cron | Windows Task Scheduler (任務(wù)計(jì)劃程序) |
|---|---|---|---|---|
| 最小執(zhí)行間隔 | 1分鐘 | 1分鐘 | 1分鐘 | 1分鐘 |
| 默認(rèn)配置文件位置 | /etc/crontab | /usr/lib/cron/tabs/ | /etc/crontab | 不適用 |
| 用戶級(jí)配置支持 | 支持 | 支持 | 支持 | 不適用 |
特殊字符支持對(duì)比
| 特殊字符 | Linux/Unix Cron | macOS Cron | BSD Cron | Windows Task Scheduler(任務(wù)計(jì)劃程序) |
|---|---|---|---|---|
| \* (所有值) | 支持 | 支持 | 支持 | 支持 |
| , (值列表) | 支持 | 支持 | 支持 | 支持 |
| \- (范圍) | 支持 | 支持 | 支持 | 支持 |
| / (步長(zhǎng)) | 支持 | 支持 | 支持 | 支持 |
| L (最后) | 部分發(fā)行版支持 | 不支持 | 不支持 | 不適用 |
| W (工作日) | 部分發(fā)行版支持 | 不支持 | 不支持 | 不適用 |
| \# (第n個(gè)工作日) | 部分發(fā)行版支持 | 不支持 | 不支持 | 不適用 |
| ? (不指定) | 部分發(fā)行版支持 | 不支持 | 不支持 | 不適用 |
功能特性對(duì)比
| 功能 | Linux/Unix Cron | macOS Cron | BSD Cron | Windows Task Scheduler(任務(wù)計(jì)劃程序) |
|---|---|---|---|---|
| 環(huán)境變量支持 | 有限支持 | 有限支持 | 有限支持 | 完全支持 |
| 錯(cuò)過(guò)任務(wù)處理 | 不自動(dòng)處理 | 不自動(dòng)處理 | 不自動(dòng)處理 | 可配置處理策略 |
| 日志記錄 | syslog | syslog | syslog | 事件查看器 |
| 秒級(jí)調(diào)度 | 不支持 | 不支持 | 不支持 | 支持 |
| GUI配置界面 | 無(wú) | 無(wú) | 無(wú) | 有 |
| 任務(wù)依賴關(guān)系 | 不支持 | 不支持 | 不支持 | 支持 |
| 網(wǎng)絡(luò)觸發(fā) | 不支持 | 不支持 | 不支持 | 支持 |
| 電源管理集成 | 不支持 | 不支持 | 不支持 | 支持 |
使用注意事項(xiàng)
Linux/Unix/macOS/BSD:
需要正確設(shè)置文件權(quán)限
需要注意環(huán)境變量的繼承問(wèn)題
建議使用絕對(duì)路徑
Windows Task Scheduler:
提供更多的觸發(fā)器選項(xiàng)
支持更細(xì)粒度的權(quán)限控制
可與系統(tǒng)事件集成
跨平臺(tái)兼容性:
編寫跨平臺(tái)的定時(shí)任務(wù)時(shí)需考慮最小公共特性集
建議使用基本的時(shí)間格式,避免使用特殊字符
考慮使用跨平臺(tái)的調(diào)度工具(如Jenkins)
主流框架對(duì)比
基本語(yǔ)法支持對(duì)比
| 特性 | Spring Framework | Quartz | Linux Cron | Jenkins | Kubernetes CronJob |
|---|---|---|---|---|---|
| 秒級(jí)支持 | 支持(可選) | 支持 | 不支持 | 支持 | 不支持 |
| 年份字段 | 可選 | 支持 | 不支持 | 支持 | 不支持 |
| 最小間隔 | 1秒 | 1秒 | 1分鐘 | 1秒 | 1分鐘 |
| 時(shí)區(qū)支持 | 支持 | 支持 | 系統(tǒng)時(shí)區(qū) | 支持 | 支持 |
特殊字符支持對(duì)比
| 特殊字符 | Spring Framework | Quartz | Linux Cron | Jenkins | Kubernetes CronJob |
|---|---|---|---|---|---|
| \* (所有值) | 支持 | 支持 | 支持 | 支持 | 支持 |
| , (值列表) | 支持 | 支持 | 支持 | 支持 | 支持 |
| \- (范圍) | 支持 | 支持 | 支持 | 支持 | 支持 |
| / (步長(zhǎng)) | 支持 | 支持 | 支持 | 支持 | 支持 |
| ? (不指定) | 支持 | 支持 | 不支持 | 支持 | 不支持 |
| L(最后) | 支持 | 支持 | 部分支持 | 支持 | 不支持 |
| W (工作日) | 支持 | 支持 | 部分支持 | 支持 | 不支持 |
| #(第n個(gè)) | 支持 | 支持 | 不支持 | 支持 | 不支持 |
使用場(chǎng)景建議
| 技術(shù) | 使用場(chǎng)景 |
|---|---|
| Spring Framework | \- 適合Java項(xiàng)目集成 \- 需要事務(wù)支持的場(chǎng)景 \- 與Spring生態(tài)深度集成 |
| Quartz | \- 獨(dú)立的調(diào)度系統(tǒng) \- 需要細(xì)粒度任務(wù)控制 \- 復(fù)雜的調(diào)度需求 |
| Linux Cron | \- 簡(jiǎn)單的系統(tǒng)任務(wù) \- 單機(jī)環(huán)境 \- 基礎(chǔ)的定時(shí)任務(wù) |
| Jenkins | \- CI/CD場(chǎng)景 \- 復(fù)雜的工作流 \- 需要可視化管理 |
| Kubernetes CronJob | \- 容器化環(huán)境 \- 云原生應(yīng)用 \- 需要高可用和擴(kuò)展性 |
使用注意事項(xiàng)
選擇建議:
根據(jù)項(xiàng)目規(guī)模選擇合適的框架
考慮維護(hù)成本和團(tuán)隊(duì)熟悉度
評(píng)估性能和可靠性需求
兼容性考慮:
不同框架的Cron表達(dá)式可能略有差異
遷移時(shí)需要注意表達(dá)式的兼容性
考慮時(shí)區(qū)處理的差異
監(jiān)控和維護(hù):
建立完善的監(jiān)控機(jī)制
做好日志收集和分析
制定故障恢復(fù)策略
實(shí)踐案例
每天23:00自動(dòng)備份一個(gè)特定的文本文件到另外一個(gè)目錄中,以確保數(shù)據(jù)的持續(xù)性和安全性。
注意事項(xiàng)
- 確保您指定的源文件路徑 (
/path/to/original/file.txt) 和目標(biāo)備份路徑 (/path/to/backup/file_backup.txt) 都是正確的。 - 檢查備份目錄是否存在,如果不存在,您需要先創(chuàng)建該目錄或在Cron任務(wù)中添加創(chuàng)建目錄的命令。
- 確保運(yùn)行Cron作業(yè)的用戶具有讀取源文件和寫入目標(biāo)目錄的權(quán)限。
- 定期檢查備份文件和日志,確認(rèn)備份任務(wù)正常運(yùn)行并有效生成備份文件。
配置步驟
編輯Cron任務(wù):
打開終端,輸入crontab -e命令以編輯當(dāng)前用戶的Cron作業(yè)。
添加Cron任務(wù):
在Cron文件中添加以下行:
0 23 * * * cp /path/to/original/file.txt /path/to/backup/file_backup.txt
解釋:
0 23 * * *表示每天23:00點(diǎn)執(zhí)行任務(wù)。cp /path/to/original/file.txt /path/to/backup/file_backup.txt表示復(fù)制file.txt文件到備份目錄。
保存并退出:
- 如果使用Nano編輯器,按
Ctrl+X然后按Y確認(rèn)保存更改,再按Enter退出。 - 如果使用Vi或Vim編輯器,輸入
:wq然后按Enter保存并退出。
常見問(wèn)題
查看Cron日志
Cron的執(zhí)行通常會(huì)被記錄到系統(tǒng)日志中,查看這些日志可以幫助您了解Cron任務(wù)是否被觸發(fā):
grep CRON /var/log/syslog
這個(gè)命令會(huì)顯示所有Cron相關(guān)的日志,包括任務(wù)執(zhí)行的記錄。
Cron任務(wù)執(zhí)行超時(shí)
解決方法:
- 優(yōu)化腳本:優(yōu)化腳本邏輯,減少執(zhí)行時(shí)間。
- 分割任務(wù):如果任務(wù)可以分割,將其拆分成多個(gè)較小的任務(wù)。
- 使用超時(shí):在Cron命令中使用
timeout命令來(lái)限制腳本執(zhí)行的最長(zhǎng)時(shí)間。例如:0 5 * * * timeout 300 /path/to/script.sh,這將限制腳本執(zhí)行時(shí)間為300秒。
使用簡(jiǎn)單的測(cè)試命令
在配置復(fù)雜的Cron任務(wù)前,先使用一個(gè)簡(jiǎn)單的測(cè)試命令來(lái)確認(rèn)Cron任務(wù)能否正確觸發(fā)。例如,設(shè)置一個(gè)任務(wù)每分鐘寫入當(dāng)前時(shí)間到一個(gè)文件中:
* * * * * date >> /path/to/date_output.txt
幾分鐘后檢查date_output.txt文件,看是否每分鐘都有時(shí)間記錄更新。
重定向輸出進(jìn)行測(cè)試
在Cron表達(dá)式中添加重定向,將輸出和錯(cuò)誤定向到日志文件中,這樣您可以檢查腳本是否執(zhí)行以及執(zhí)行中的輸出和錯(cuò)誤:
30 4 * * * /path/to/your-script.sh > /path/to/logfile.log 2>&1
檢查/path/to/logfile.log來(lái)看腳本執(zhí)行的輸出和錯(cuò)誤。
定時(shí)任務(wù)執(zhí)行頻率配置
配置建議**:**
- 不要過(guò)頻繁:根據(jù)任務(wù)的性質(zhì),避免設(shè)置過(guò)于頻繁的執(zhí)行頻率,這可能會(huì)對(duì)系統(tǒng)性能產(chǎn)生影響。
- 按需配置:簡(jiǎn)單的日常任務(wù)如備份可能只需每天執(zhí)行一次,而某些監(jiān)控任務(wù)可能需要每小時(shí)甚至更頻繁地執(zhí)行。
- 考慮系統(tǒng)負(fù)載:在系統(tǒng)負(fù)載較低的時(shí)間段執(zhí)行資源密集型任務(wù)。
排查Cron問(wèn)題的其他技巧
- 輸出重定向:將Cron任務(wù)的輸出和錯(cuò)誤重定向到日志文件,便于追蹤問(wèn)題。例如:
30 4 * * * /path/to/job.sh > /path/to/job.log 2>&1 - 郵件通知:如果Cron任務(wù)執(zhí)行出錯(cuò)或產(chǎn)生輸出,Cron守護(hù)進(jìn)程會(huì)通過(guò)電子郵件發(fā)送通知。確保系統(tǒng)郵件功能配置正確,或在Cron任務(wù)中顯式設(shè)置郵件發(fā)送。
- 路徑問(wèn)題:絕對(duì)路徑通常比相對(duì)路徑更可靠。在Cron任務(wù)中盡可能使用絕對(duì)路徑。
- 編輯和查看Cron任務(wù):使用
crontab -e編輯Cron任務(wù),使用crontab -l查看當(dāng)前用戶的所有Cron任務(wù),確保任務(wù)已正確設(shè)置。
Cron任務(wù)沒有按預(yù)定時(shí)間執(zhí)行
原因和解決方法:
- Cron表達(dá)式錯(cuò)誤:檢查Cron表達(dá)式的格式是否正確。確保時(shí)間設(shè)置沒有錯(cuò)誤。
- 腳本權(quán)限不足:確保執(zhí)行腳本具有適當(dāng)?shù)膱?zhí)行權(quán)限。使用
chmod +x /path/to/script.sh賦予執(zhí)行權(quán)限。 - 環(huán)境問(wèn)題:Cron任務(wù)可能沒有加載用戶的完整環(huán)境配置。確保Cron腳本中使用的命令包含完整路徑,或在Cron腳本中顯式設(shè)置環(huán)境變量。
- 日志檢查:查看Cron日志通常位于
/var/log/cron(取決于系統(tǒng)配置),或檢查腳本的輸出重定向日志,了解Cron任務(wù)是否被觸發(fā)以及可能的錯(cuò)誤信息。
定時(shí)任務(wù)配置完成后,怎么確定它一定會(huì)生效?
檢查Cron語(yǔ)法: 確保Cron任務(wù)的時(shí)間和日期語(yǔ)法正確。使用crontab -e編輯您的Cron任務(wù),并仔細(xì)檢查時(shí)間字段是否正確設(shè)置。時(shí)間字段通常為:
分 時(shí) 日 月 周 命令
確保每個(gè)字段都正確無(wú)誤。
在很多Linux系統(tǒng)中,Cron服務(wù)需要運(yùn)行中才能執(zhí)行任務(wù)。您可以使用以下命令檢查Cron服務(wù)的狀態(tài):
sudo service cron status
或者使用:
sudo systemctl status cron
如果服務(wù)未運(yùn)行,您需要啟動(dòng)它:
sudo service cron start
或者使用:
sudo systemctl start cron
賦予腳本執(zhí)行權(quán)限確保您的腳本文件具有執(zhí)行權(quán)限。使用以下命令添加執(zhí)行權(quán)限:
chmod +x /path/to/your-script.sh
如何查看當(dāng)前用戶所有的cron作業(yè)?
crontab -l是一個(gè)常用的 Linux/Unix 命令,用于列出當(dāng)前用戶的 cron 作業(yè)列表。Cron 是一個(gè)基于時(shí)間的作業(yè)調(diào)度器,它允許用戶安排在特定時(shí)間自動(dòng)執(zhí)行腳本或命令。
注意事項(xiàng):
- 只有當(dāng)前用戶的 cron 作業(yè)會(huì)被列出。要查看其他用戶的 cron 作業(yè),您需要有相應(yīng)的系統(tǒng)權(quán)限。
- 如果沒有配置任何 cron 作業(yè),
crontab -l命令可能不會(huì)顯示任何輸出。
如何查看當(dāng)前用戶的Crontab任務(wù)列表?
要查看當(dāng)前用戶的 Crontab 任務(wù)列表,您可以使用命令crontab -l。這個(gè)命令會(huì)列出當(dāng)前用戶的所有 Crontab 任務(wù)
注意事項(xiàng):
- 權(quán)限:普通用戶只能查看和編輯自己的 Crontab 任務(wù)。root 用戶或具有適當(dāng)權(quán)限的用戶可以查看和編輯所有用戶的任務(wù)。
- 環(huán)境:Crontab 中執(zhí)行的命令運(yùn)行在一個(gè)簡(jiǎn)化的環(huán)境中,很多環(huán)境變量默認(rèn)可能不會(huì)被加載。因此,最好在命令中使用完整路徑。
如何編輯Crontab來(lái)刪除特定任務(wù)?
1、打開 Crontab 編輯器:運(yùn)行crontab -e命令。這將會(huì)打開當(dāng)前用戶的定時(shí)任務(wù)列表在默認(rèn)的文本編輯器中,通常是vi或nano。
2、刪除特定的任務(wù):在編輯器中,定位到您想要?jiǎng)h除的任務(wù)行,然后刪除這一行。在vi或vim中,您可以將光標(biāo)移動(dòng)到該行,然后按dd來(lái)刪除。在nano編輯器中,使用方向鍵移動(dòng)到該行,然后使用刪除鍵或者Ctrl+K來(lái)剪切這行。
3、保存并退出:
- 在
vi或vim中,按:wq然后回車來(lái)保存更改并退出。 - 在
nano中,按Ctrl+X,然后按Y確認(rèn)保存更改,并按回車退出。
4、如果您想刪除當(dāng)前用戶所有的定時(shí)任務(wù),可以使用以下命令:
警告
這個(gè)命令會(huì)在沒有額外確認(rèn)的情況下直接刪除所有任務(wù),請(qǐng)謹(jǐn)慎選擇!
crontab -r
注意事項(xiàng):
- 備份:在編輯或刪除定時(shí)任務(wù)之前,建議先備份當(dāng)前的 Crontab 設(shè)置。您可以使用
crontab -l > crontab_backup.txt來(lái)保存當(dāng)前的任務(wù)到一個(gè)文件中。 - 謹(jǐn)慎操作: 刪除或修改 Crontab 任務(wù)可能會(huì)影響系統(tǒng)運(yùn)行或應(yīng)用功能,操作前請(qǐng)確保明確當(dāng)前任務(wù)的作用。
Linux系統(tǒng)中非root用戶
執(zhí)行**crontab**命令時(shí)提示“You (*) are not allowed to use this program (crontab)”錯(cuò)誤如何解決?
使用root用戶遠(yuǎn)程連接ECS實(shí)例。
具體操作,請(qǐng)參見使用Workbench工具以SSH協(xié)議登錄Linux實(shí)例。
分別執(zhí)行如下命令,查看是否存在cron.allow或cron.deny文件。
find /etc/cron.allow find /etc/cron.deny
cron.allow或cron.deny文件是否存在與是否可以使用crontab命令的用戶關(guān)系說(shuō)明如下。
| cron.allow文件是否存在 | cron.deny文件是否存在 | 有權(quán)限使用crontab的用戶范圍 |
|---|
| cron.allow文件是否存在 | cron.deny文件是否存在 | 有權(quán)限使用crontab的用戶范圍 |
|---|---|---|
| 不存在 | 不存在 | 僅root用戶可使用crontab命令。 |
| 存在 | 不存在 | 僅cron.allow文件中的用戶可使用crontab命令。 |
| 不存在 | 存在 | 不在cron.deny文件中的用戶都可以使用crontab命令。 說(shuō)明 若cron.deny文件內(nèi)容為空,則所有用戶都可以使用crontab令。 |
| 存在 | 存在 | 僅cron.allow文件中的用戶可以使用crontab命令。 說(shuō)明 cron.allow優(yōu)先級(jí)高于cron.deny,此時(shí)cron.deny不起作用。 |
根據(jù)需要,編輯cron.allow或cron.deny文件。
- 如果不存在
cron.allow文件,若cron.deny文件中存在非root用戶的用戶名,請(qǐng)刪除該用戶的用戶名后,保存cron.deny。 - 如果存在
cron.allow文件,將該非root用戶添加到cron.allow文件中,保存cron.allow。
執(zhí)行如下命令,重啟cron服務(wù) 。
systemctl restart crond.service
切換到該非root用戶,重新執(zhí)行crontab命令,確保可以正常執(zhí)行。
子表達(dá)式都有哪些范圍與使用注意事項(xiàng)?
天(星期)子表達(dá)式在Cron表達(dá)式中是第五個(gè)字段,用于指定任務(wù)在一周中的哪幾天執(zhí)行。
數(shù)字:1-7(1 = 星期日,2 = 星期一,…,7 = 星期六)
英文縮寫:SUN, MON, TUE, WED, THU, FRI, SAT
常用格式示例:
MON-FRI:表示星期一到星期五每天執(zhí)行MON,WED,FRI:表示每周一、三、五執(zhí)行MON-WED,SAT:表示星期一到星期三以及星期六執(zhí)行2-6:表示星期一到星期五執(zhí)行(使用數(shù)字表示)SUN,SAT:表示每周末(周六和周日)執(zhí)行
高級(jí)用法:
SUN#1:每月的第一個(gè)星期日6L:每月的最后一個(gè)星期五*/2:每隔一天執(zhí)行一次MON#2:每月的第二個(gè)星期一
注意事項(xiàng):
- 當(dāng)使用英文縮寫時(shí),大小寫不敏感,即
MON和mon是等效的。 - 使用
?時(shí),通常是為了避免與月份中的日期設(shè)置沖突。 - 使用
L和#時(shí)要小心,確保不會(huì)導(dǎo)致無(wú)效的日期組合。 - 星期的數(shù)字表示中,1 代表星期日,這一點(diǎn)需要特別注意,可能與直覺不符。
L字符在不同表達(dá)式中的使用注意事項(xiàng)
在天(月)子表達(dá)式中
單獨(dú)使用:
L= 月份的最后一天- 示例:
0 0 L * ?表示在每月最后一天的午夜執(zhí)行 - 會(huì)自動(dòng)適應(yīng)不同月份的天數(shù)(包括閏年二月)
與偏移值一起使用:
L-n= 月份倒數(shù)第n+1天- 示例:
0 0 L-2 * ?表示在每月倒數(shù)第3天的午夜執(zhí)行
在天(星期)子表達(dá)式中
單獨(dú)使用:
L= 星期六(一周的最后一天)示例:
0 0 ? * L表示每周六午夜執(zhí)行
與數(shù)字組合使用:
nL= 當(dāng)月的最后一個(gè)星期n示例:
6L表示當(dāng)月的最后一個(gè)星期五示例:
2L表示當(dāng)月的最后一個(gè)星期一
與星期縮寫組合:
XXXL= 當(dāng)月的最后一個(gè)指定星期示例:
FRIL表示當(dāng)月的最后一個(gè)星期五示例:
MONL表示當(dāng)月的最后一個(gè)星期一
注意事項(xiàng)
避免組合使用:
L字符不應(yīng)與其他范圍或列表一起使用
錯(cuò)誤示例:
L,15或L-3,15
月份天數(shù)適應(yīng):
L會(huì)自動(dòng)適應(yīng)不同月份的天數(shù)
會(huì)正確處理閏年二月的情況
星期使用注意:
在天(星期)字段中使用L時(shí),建議將天(月)字段設(shè)置為
?這樣可以避免日期沖突
執(zhí)行時(shí)間:
如果指定的最后一個(gè)星期幾不存在,任務(wù)將不會(huì)執(zhí)行
例如:二月可能沒有第5個(gè)星期五
Linux中實(shí)例中執(zhí)行“crontab -e”命令
提示“errors in crontab file, can’t install”錯(cuò)誤怎么辦?
您可以登錄實(shí)例,修改crontab文件格式或擴(kuò)容云盤以解決此問(wèn)題。
1、遠(yuǎn)程連接ECS實(shí)例。
具體操作,請(qǐng)參見ECS遠(yuǎn)程連接方式概述。
2、檢查crontab文件中定時(shí)任務(wù)格式是否正確。
- 若格式正確,請(qǐng)繼續(xù)執(zhí)行步驟3。
- 若格式不正確,請(qǐng)及時(shí)更正,具體格式如下。

3、執(zhí)行以下命令,查看磁盤使用率。
df -h
系統(tǒng)顯示類似如下信息。例如,Use%為分區(qū)/dev/xvda1的使用率。
若磁盤使用率接近100%,說(shuō)明磁盤空間不足,建議您擴(kuò)容云盤后再進(jìn)行操作。具體操作,請(qǐng)參見云盤擴(kuò)容指引。

總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux使用watch命令監(jiān)控Docker容器狀態(tài)的操作方法
在現(xiàn)代的開發(fā)和運(yùn)維環(huán)境中,容器化技術(shù)已經(jīng)成為一種重要的趨勢(shì),而Docker作為最流行的容器化平臺(tái)之一,Linux中的watch命令就是一個(gè)非常有用的工具,它可以幫助我們定期執(zhí)行指定的命令,并全屏顯示輸出,本文給大家介紹了在Linux中使用watch命令監(jiān)控Docker容器狀態(tài)2024-10-10
Centos7 mysql數(shù)據(jù)庫(kù)安裝及配置實(shí)現(xiàn)教程
這篇文章主要介紹了Centos7 mysql數(shù)據(jù)庫(kù)安裝及配置實(shí)現(xiàn)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
CentOS MySQL 5.7編譯安裝步驟詳細(xì)說(shuō)明
這篇文章主要介紹了CentOS MySQL 5.7編譯安裝詳細(xì)介紹的相關(guān)資料,這里對(duì)安裝步驟進(jìn)行了詳細(xì)介紹,需要的朋友可以參考下2016-12-12
每天一個(gè)linux命令(30): chown命令詳解
本篇文章主要介紹了linux chown命令。chown將指定文件的擁有者改為指定的用戶或組,感興趣的朋友可以了解一下。2016-11-11

