linux服務(wù)器ubuntu定時(shí)任務(wù)cron設(shè)置每秒執(zhí)行
前言
后端的同學(xué)經(jīng)常會(huì)遇到在服務(wù)器做一些定時(shí)腳本處理,比如定時(shí)清理日志,定時(shí)請(qǐng)求某個(gè)接口做特殊的業(yè)務(wù)處理,大多數(shù)linux版本都會(huì)帶cron服務(wù),以u(píng)buntu服務(wù)器做個(gè)示例。
一、cron介紹
cron 是一個(gè)在 Unix-like 操作系統(tǒng)中用于定時(shí)執(zhí)行任務(wù)的工具。它是 “Chronos”(希臘語(yǔ),意為時(shí)間)的縮寫(xiě)。cron 允許用戶根據(jù)一定的時(shí)間間隔、日期或特定的時(shí)間點(diǎn)自動(dòng)運(yùn)行預(yù)定的任務(wù),這些任務(wù)通常是腳本或命令。
以下是 cron 的基本概念和使用方法:
1.Cron 表達(dá)式: 用戶通過(guò)編寫(xiě)稱為 “Cron 表達(dá)式” 的字符串來(lái)指定任務(wù)的執(zhí)行時(shí)間。這個(gè)表達(dá)式包含了分鐘、小時(shí)、日期、月份和星期幾等信息,以及需要運(yùn)行的命令或腳本。Cron 表達(dá)式的格式為:
分鐘(0-59) 小時(shí)(0-23) 日期(1-31) 月份(1-12) 星期幾(0-6) 命令
例如,0 2 * * * /usr/bin/my_script 表示在每天凌晨 2 點(diǎn)執(zhí)行 /usr/bin/my_script。
2.用戶的 Crontab 文件: 每個(gè)用戶都可以有自己的 crontab 文件,用于定義該用戶的定時(shí)任務(wù)。通過(guò) crontab 命令,用戶可以編輯、添加、刪除自己的定時(shí)任務(wù)。
crontab -e:編輯當(dāng)前用戶的 crontab 文件。crontab -l:列出當(dāng)前用戶的 crontab 內(nèi)容。crontab -r:刪除當(dāng)前用戶的 crontab 文件。
3.系統(tǒng)的 Crontab 文件: 除了每個(gè)用戶的 crontab 文件,系統(tǒng)還可以有一個(gè)全局的 crontab 文件,通常存儲(chǔ)在 /etc/crontab 或 /etc/cron.d/ 中。這些任務(wù)是以 root 用戶的身份執(zhí)行的,因此可以用于執(zhí)行系統(tǒng)級(jí)別的任務(wù)。
4.Anacron: 有時(shí),由于系統(tǒng)關(guān)機(jī)或休眠等原因,定時(shí)任務(wù)可能錯(cuò)過(guò)執(zhí)行時(shí)間。為了解決這個(gè)問(wèn)題,anacron 工具被引入,允許在系統(tǒng)啟動(dòng)時(shí)執(zhí)行錯(cuò)過(guò)的任務(wù)。
5.日志: cron 會(huì)將執(zhí)行的任務(wù)的輸出信息發(fā)送到指定的用戶郵件,如果任務(wù)產(chǎn)生輸出的話。這可以通過(guò)在 crontab 文件中設(shè)置 MAILTO 變量來(lái)配置,也可以在命令行中使用 MAILTO=user@example.com。
cron` 是一個(gè)強(qiáng)大的工具,使得在 Linux 系統(tǒng)上自動(dòng)化任務(wù)變得簡(jiǎn)單。它在系統(tǒng)管理、日常維護(hù)和數(shù)據(jù)處理等方面都有廣泛的應(yīng)用。
二、添加定時(shí)任務(wù)進(jìn)行測(cè)試
1.編寫(xiě)腳本
# 在/opt目錄下創(chuàng)建一個(gè)test目錄做測(cè)試 cd /opt && mkdir test && cd test # 創(chuàng)建一個(gè)sh腳本,并且添加可執(zhí)行權(quán)限 touch test.sh && chmod +x ./test.sh # 給腳本添加內(nèi)容簡(jiǎn)單輸出一個(gè)hello vim test.sh #下面這些都是加入到腳本里面的,如果對(duì)于bash腳本不熟悉的,先熟悉下bash腳本 #!/usr/bin/env bash echo "hello" # 調(diào)用test.sh 進(jìn)行測(cè)試

2. 添加cron進(jìn)行測(cè)試
# 執(zhí)行crontable -e 進(jìn)入定時(shí)器編輯 crontable -e # 添加定時(shí)任務(wù),我這里添加一個(gè)每分鐘執(zhí)行一次,并輸出結(jié)果到test.log,方便看下是否添加成功 */1 * * * * /opt/test/test.sh > /opt/test/test.log # 執(zhí)行:wq保存退出 :wq

3. cron最小的到每分鐘執(zhí)行一次,可以通過(guò)bash腳本,添加一個(gè)循環(huán),實(shí)現(xiàn)每秒,或者幾秒進(jìn)行對(duì)應(yīng)的操作,我設(shè)置的每5秒執(zhí)行一次
#!/usr/bin/env bash
step=5 #間隔秒數(shù)
for ((i = 0; i < 60; i = (i + step))); do
# 獲取當(dāng)前時(shí)間
current_time=$(date +"%Y-%m-%d %H:%M:%S")
# 打印當(dāng)前時(shí)間
echo "當(dāng)前時(shí)間是: $current_time"
sleep $step
done
exit 0

總結(jié)
使用 cron 時(shí),有一些注意事項(xiàng)可以幫助你確保任務(wù)按預(yù)期執(zhí)行,并減少潛在的問(wèn)題。以下是一些建議:
- 路徑問(wèn)題:
cron執(zhí)行任務(wù)時(shí)可能不會(huì)設(shè)置與你的用戶 shell 環(huán)境相同的環(huán)境變量。因此,確保你的腳本中使用的所有命令和文件路徑都是絕對(duì)路徑,或者在腳本開(kāi)頭設(shè)置合適的環(huán)境變量。 - 日志記錄: 在
cron任務(wù)中,問(wèn)題可能不容易被察覺(jué),因此要確保你的任務(wù)會(huì)記錄輸出。在腳本中使用echo或者將輸出重定向到文件,以便查看任務(wù)是否執(zhí)行成功,或者在出現(xiàn)問(wèn)題時(shí)查找錯(cuò)誤信息。 - 用戶權(quán)限: 如果
cron任務(wù)依賴于某個(gè)用戶的特權(quán),請(qǐng)確保任務(wù)以正確的用戶身份運(yùn)行。你可以使用sudo或者在 crontab 文件中指定任務(wù)的用戶。 - 相對(duì)路徑: 當(dāng)你使用相對(duì)路徑時(shí),確保
cron執(zhí)行任務(wù)的當(dāng)前工作目錄是你所期望的。最好使用絕對(duì)路徑,以防止不同的工作目錄導(dǎo)致問(wèn)題。 - 安全性: 避免在 crontab 文件中設(shè)置過(guò)于頻繁的任務(wù),以免影響系統(tǒng)性能。此外,確保只有授權(quán)用戶可以編輯 crontab 文件,以防止未經(jīng)授權(quán)的修改。
- 任務(wù)執(zhí)行時(shí)間: 考慮任務(wù)執(zhí)行的時(shí)間,確保它不會(huì)與系統(tǒng)重啟、備份或其他關(guān)鍵任務(wù)沖突。此外,注意任務(wù)的執(zhí)行頻率,確保不會(huì)產(chǎn)生不必要的負(fù)載。
- 環(huán)境變量: 如果你的任務(wù)依賴于特定的環(huán)境變量,最好在 crontab 文件中明確設(shè)置這些變量。這可以通過(guò)在 crontab 文件的頂部添加類似于
SHELL=/bin/bash和其他環(huán)境變量的行來(lái)完成。 - 注意 crontab 語(yǔ)法: 使用正確的 crontab 語(yǔ)法是非常重要的。檢查你的 crontab 表達(dá)式確保它符合預(yù)期。可以使用在線的 crontab 表達(dá)式生成器來(lái)幫助創(chuàng)建正確的語(yǔ)法。
- 重啟 cron 服務(wù): 如果你修改了
/etc/crontab文件或者其他系統(tǒng)級(jí)別的 crontab 文件,可能需要重啟 cron 服務(wù)以使更改生效。 - 考慮郵件通知: 如果你希望在任務(wù)執(zhí)行時(shí)收到通知,可以通過(guò)在 crontab 文件中設(shè)置
MAILTO變量來(lái)配置郵件通知。這樣,任何任務(wù)的輸出都會(huì)通過(guò)郵件發(fā)送給指定的用戶。
通過(guò)注意這些事項(xiàng),你可以更好地管理和調(diào)試 cron 任務(wù),確保它們按照預(yù)期執(zhí)行。
到此這篇關(guān)于linux服務(wù)器ubuntu定時(shí)任務(wù)cron設(shè)置每秒執(zhí)行的文章就介紹到這了,更多相關(guān)linux定時(shí)任務(wù)cron設(shè)置每秒執(zhí)行內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
深入理解Apache?RocketMQ?中Message?消息的核心概念
深入理解一下Apache?RocketMQ中Message(消息)這個(gè)核心概念,這份文檔詳細(xì)闡述了消息的定義、在模型中的位置、內(nèi)部屬性、約束和使用建議,感興趣的朋友跟隨小編一起學(xué)習(xí)吧2025-08-08
Linux中實(shí)現(xiàn)開(kāi)機(jī)自啟動(dòng)的幾種常見(jiàn)方式及區(qū)別詳解
在Linux中,有多個(gè)機(jī)制可以實(shí)現(xiàn)開(kāi)機(jī)自啟動(dòng),它們?cè)诓煌某跏蓟到y(tǒng)(如SysVinit、systemd)下有不同的表現(xiàn),以下是一些常見(jiàn)的自啟動(dòng)方法及其區(qū)別,需要的朋友可以參考下2025-11-11
詳解Centos7擴(kuò)展磁盤(pán)空間(LVM管理)
本篇文章主要介紹了詳解Centos7擴(kuò)展磁盤(pán)空間(LVM管理),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
Linux動(dòng)態(tài)加載并調(diào)用動(dòng)態(tài)庫(kù)(.so)實(shí)現(xiàn)方式
本文介紹了加載動(dòng)態(tài)鏈接庫(kù)的過(guò)程以及引用計(jì)數(shù)機(jī)制,并詳細(xì)描述了頭文件中相關(guān)函數(shù)的作用,還提供了編譯動(dòng)態(tài)庫(kù)和主程序的命令,強(qiáng)調(diào)了鏈接選項(xiàng)的重要性2026-04-04
Linux利用lsof/extundelete工具恢復(fù)誤刪除的文件或目錄
這篇文章主要給大家介紹了關(guān)于Linux利用lsof/extundelete工具恢復(fù)誤刪除的文件或目錄的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
linux中設(shè)置nexus開(kāi)機(jī)自啟動(dòng)的方法
這篇文章主要介紹了linux中設(shè)置nexus開(kāi)機(jī)自啟動(dòng)的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2024-02-02
Linux調(diào)試工具GDB使用簡(jiǎn)易教程
這篇文章主要介紹了Linux調(diào)試工具GDB使用簡(jiǎn)易教程,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
Apache mod_rewrite實(shí)現(xiàn)HTTP和HTTPS重定向跳轉(zhuǎn)
這篇文章主要介紹了Apache mod_rewrite實(shí)現(xiàn)HTTP和HTTPS重定向跳轉(zhuǎn),本文分別給出了HTTP重定向HTTPS和HTTPS重定向HTTP配置參考,需要的朋友可以參考下2015-06-06

