crontab極簡教程

2021-10-10 22:57:11 字數 4697 閱讀 5669

[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 ...