[toc]
### crontab簡介
linux crontab是用來定期執行程式的命令。
當安裝完成作業系統之後,預設便會啟動此任務排程命令。
### crontab常用命令
- crontab -e
開啟vi編輯器,編寫乙個定時任務,退出vi後,若vi內容不為空,則會建立乙個任務。
- crontab -l
檢視當前已經建立的定時任務
- crontab -r
刪除當前使用者建立的定時任務。一般刪除定時任務不這樣操作,而是使用crontab -e 命令開啟任務,將任務內容清空,儲存並退出之後,該任務就刪除了。
- tail -f /var/log/cron
檢視任務執行的日誌
### 簡單示例
建立兩個定時任務。第乙個,一分鐘執行一次,使用echo輸出一串字元;第二個,兩分鐘執行一次,使用echo輸出另一串字元。
- 建立任務
在linux 的shell 中輸入crontab -e 命令
*/2 * * * * echo "execute once every two minutes"
~~~儲存並退出
- 檢視剛才建立的定時任務
在linux 的 shell 中輸入crontab -l 命令
能輸出上述vi中的內容,說明任務建立成功
- 檢視任務執行日誌
在linux的shell中輸入tail -f /var/log/cron 命令
可以看到類似如下的輸出:
oct 14 20:28:01 v2 crond[2764]: (root) cmd (echo "execute once every two minutes")
oct 14 20:28:01 v2 crond[2765]: (root) cmd (echo "once a minute")
oct 14 20:28:01 v2 crond[2762]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:28:01 v2 crond[2763]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:28:06 v2 crontab[2853]: (root) list (root)
oct 14 20:29:01 v2 crond[3830]: (root) cmd (echo "once a minute")
oct 14 20:29:01 v2 crond[3827]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:30:01 v2 crond[4871]: (root) cmd (/usr/lib64/sa/sa1 1 1)
oct 14 20:30:01 v2 crond[4875]: (root) cmd (echo "execute once every two minutes")
oct 14 20:30:01 v2 crond[4876]: (root) cmd (echo "once a minute")
oct 14 20:30:01 v2 crond[4870]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:30:01 v2 crond[4869]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:31:01 v2 crond[6010]: (root) cmd (echo "once a minute")
oct 14 20:31:01 v2 crond[6009]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:32:01 v2 crond[7043]: (root) cmd (echo "execute once every two minutes")
oct 14 20:32:01 v2 crond[7044]: (root) cmd (echo "once a minute")
oct 14 20:32:01 v2 crond[7041]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:32:01 v2 crond[7042]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:33:01 v2 crond[8130]: (root) cmd (echo "once a minute")
oct 14 20:33:01 v2 crond[8129]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:34:01 v2 crond[9158]: (root) cmd (echo "once a minute")
oct 14 20:34:01 v2 crond[9159]: (root) cmd (echo "execute once every two minutes")
oct 14 20:34:01 v2 crond[9157]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:34:01 v2 crond[9156]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:35:01 v2 crond[10255]: (root) cmd (echo "once a minute")
oct 14 20:35:01 v2 crond[10254]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
oct 14 20:36:01 v2 crond[11251]: (root) cmd (echo "once a minute")
oct 14 20:36:01 v2 crond[11250]: (root) cmd (echo "execute once every two minutes")
oct 14 20:36:01 v2 crond[11249]: (root) mail (mailed 9 bytes of output but got status 0x004b#012)
### 定時執行乙個指令碼
每天的凌晨5點鐘,備份mysql的資料庫。crontab只負責觸發定時任務,具體的備份工作由mysqldump來執行。
- crontab 任務
~~~0 5 * * * sh /data/mysql/mysqldump-backup.sh
~~~- mysql備份指令碼
宿主機為阿里雲ecs,作業系統為centos,mysql是用docker搭建的。以下指令碼是在docker宿主機中執行。
~~~#!/bin/bash
#設定mysql的登入使用者名稱、密碼、伺服器host、埠、資料庫名稱、容器名稱(根據實際情況填寫)
mysql_user="what"
mysql_password="what"
mysql_host="what"
mysql_port="what"
db_name="what"
contanier_name_or_id="what"
# 備份檔案存放位址(根據實際情況填寫)
backup_location=/data/mysql/data/backups
# 是否刪除過期資料
expire_backup_delete="off"
expire_days=1
backup_time=`date +%y%m%d%h%m`
backup_dir=$backup_location
# 備份指定資料庫中資料
docker exec $contanier_name_or_id mysqldump -u$mysql_user -p"$mysql_password" -b $db_name > $backup_dir/$db_name-$backup_time.sql
echo "備份檔案路徑: $backup_dir/$db_name-$backup_time.sql"
# 刪除過期資料
if [ "$expire_backup_delete" == "on" -a "$backup_location" != "" ];then
`find $backup_location/ -type f -mtime +$expire_days | xargs rm -rf`
echo "已清理過期的資料庫備份檔案..."
fi~~~
backup_location:宿主機絕對路徑
$mysql_password:若mysql賬戶密碼中存在特殊字元,需要使用雙引號包裹此變數
exec:exec後面不可以新增「-it」。否則會導致備份的sql檔案中內容為空。exec 加了 -it 引數就開啟了乙個終端,crontab任務無法進入任何終端。
crontab極簡教程
目錄linux crontab是用來定期執行程式的命令。當安裝完成作業系統之後,預設便會啟動此任務排程命令。建立兩個定時任務。第乙個,一分鐘執行一次,使用echo輸出一串字元 第二個,兩分鐘執行一次,使用echo輸出另一串字元。在linux 的shell 中輸入crontab e 命令 echo o...
Shell 極簡教程
vim hello world.sh bin bash echo hello world chmod x sh hello world.sh hello,world bin bash echo hello,world a 1b expr a 1 echo b注意,變數名和等號之間不能有空格,這可能和...
Docker極簡教程 高階
建立檔案dockerfile檔案,該檔名不可更改 vi dockerfile寫入文字 from alpine latest maintainer smilevt cmd echo hello docker 儲存退出 docker build命令用於使用 dockerfile 建立映象,docker ...