概述
對於Java開發人員,定時任務並不陌生,無非是讓系統在特定時間執行特定的命令或程序。例如spring提供的@Scheduled注解、OpenSymphony提供的quartz框架,都可以實現定時任務。在操作系統這個層面,linux也提供了相應的解決方案——crontab命令。
crontab命令的格式
crontab [-e] [-l] [-r]
后面的三個可選項必須選擇一項,且只能選擇一項。
-e:編輯定時任務;
-l:以列表形式顯示當前所有的定時任務;
-r:刪除當前所有的定時任務。
其中,crontab -e會彈出vi編輯器,可以以兩種方式寫入定時任務:
1. cron表達式 + 命令
2. cron表達式 + shell腳本文件
這里的cron表達式跟https://www.cnblogs.com/dubhlinn/p/10740838.html一文提到的略有不同,最小單位為分鍾,且不用問號(?),只能手動去避免日期和星期的沖突。
直接編輯命令方式建立定時任務
使用步驟
1. 執行 crontab -e
2. 在彈出的vi編輯器中寫入:cron表達式、命令,中間以空格間隔
3. 保存退出
示例
例如,每天午夜23點將當前目錄下的內容追加到/home/dubhlinn/content.log文件中
0 23 * * * ls -l >> /home/dubhlinn/content.log
shell腳本保存命令方式建立定時任務
使用步驟
1. 創建shell腳本文件(.sh),在其中寫入命令
2. 對shell腳本文件賦予"執行"權限
3. 執行 crontab -e
4. 在彈出的編輯器中寫入:cron表達式、shell腳本文件的絕對路徑,中間以空格間隔
5. 保存退出
示例
例如每隔15分鍾,將當前日期時間追加到/home/dubhlinn/time.log文件中。
首先,在家目錄/home/dubhlinn下創建timer.sh文件,在其中寫入:date >> /home/dubhlinn/time.log。
然后,對剛創建的shell腳本文件,給所有者賦予執行權限:chmod u+x timer.sh。
最后,執行crontab -e,並在編輯器中寫入:*/15 * * * * /home/dubhlinn/timer.sh。