# CentOS AND Cron Job * CentOS (Community Enterprise Operating System) 與RHEL (Red Hat Enterprise Linux) 不同在於CentOS並不包含封閉原始碼軟體。CentOS 對上游程式碼的主要修改是為了移除不能自由使用的商標。CentOS和RHEL一樣,都可以使用 [Fedora EPEL](https://zh.wikipedia.org/wiki/Fedora#%E5%8F%91%E8%A1%8C)來補足軟體。 * Cron Job ~ (crontab & crontable) 定義: --- 1. 在給定時間點只運行一次 2. 在給定時間點週期性地運行 用法: --- 1. 在給定時間點調度Job運行 2. 創建週期性運行的Job,例如:數據庫備份、發送郵件。 檔案: --- 1. cron.deny : 表示不能使用crontab的用戶。 2. cron.allow : 表示能使用crontab的用戶。 語法 --- * 安裝crontab (若無) ``` sudo apt-get install crontab ``` * cron服務 ``` service cround start // 啟動服務 service cround stop // 關閉服務 service cround restart // 重啟服務 service cround reload // 重新載入配置 service cround status // 查看服務狀態 ``` * crontab命令語法 ``` crontab [-e [UserName]|-l[UserName]|-r[UserName]|-v[UserName]|File] ``` 注意:crontab 是用来让使用者在固定时间或固定间隔执行程序之用。-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。 各個參數說明: ``` -e[UserName] : 執行文字編輯器來設定時程表,內定的文字編輯器是vi -r[UserName] : 刪除目前的時程表 -l[UserName] : 列出目前的時程表 -v[UserName] : 列出用戶cron作業的狀態 ``` 注意:[編輯器vi](http://physexp.thu.edu.tw/~ctshih/teach/vi/index.htm) * 創建任務 ``` [root~]# crontab -e // 創建自己的一個任務調度 ``` ``` *****command path ``` 注意: 1. 前五個字段可以去整數(指定何時開始工作) 2. 第六個域是字符串(命令,其中包括crontab調度執行的命令) | 字段名稱 | 說明 | 取值範圍 | | -------- | -------- | -------- | | 分鐘 | 每小時的第幾分鐘後執行 | 0~59 | | 小時 | 每日的第幾個小時執行 | 0~23 | | 日期 | 每月的第幾天執行 | 1~31 | | 月曆 | 每年的第幾月執行 | 1~12 | | 星期 | 每週的第幾天執行 | 0~6 | 注意: crontab命令中的一些常用特殊符號: ( * )表示任何時刻 ( , )表示分割 ( - )表示一個段 【eg: 1-5】 (/n)表示每個n的單位執行一次 【eg: */1】 實做: ---- Q1 :創建一個腳本,使用crontab命令來執行腳本,且每秒執行一次。 ``` #!/bin/bash cat hello.txt >> /home/wz/test/test.txt *****/home/test.sh ``` 開始執行命令 Q2 :每個一分鐘,將系統時間寫入到/home目錄下的date1.txt ``` [root@? ~]# crontab -e *****date >> /home/date1.txt ``` 前面五个* * * * *表示时间是每隔一分钟 date命令就是得到当前的系统时间, >> 命令表示将结果累加到文件后面 > 命令则表示将结果覆盖文件 > 完成後顯示『crontab: installing new crontab』 ``` [root@? ~]# cat date1.txt ``` 查看文本文件裡面的信息。 Q3 :同时完成两件命令,即每隔一分钟就将系统时间写入到/home目录下的date1.txt文件里面,同时再每隔一分钟将该date1.txt文件拷贝到/目录下生成一个date2.txt的文件。 (a)簡單直接法(不推薦,維護不方便) ``` [root@? ~]# crontab -e *****date >> /home/date1.txt *****cp /home/date1.txt /date2.txt ``` (b)正確式 首先在目錄下編輯task.sh,裡面寫著兩條命令: ``` [root@? ~]# vi task.sh // task.sh裡面的命令 date >> /home/date1.txt cp /home/date1.txt /date3.txt ``` 此時task.sh還不是可執行文件,通過ls -l命令我們可以看到: ``` -rw-r--r--. 1 root root 54 4月 6 16:27 task.sh  //tash.sh是不可执行的,我们要修改其权限 ``` 所以我們需要通過chmod命令來修改task.sh的權限: ``` [root@? ~]# chmod 744 task.sh ``` 此時task.sh已經是可執行文件了: ``` -rwxr--r--. 1 root root 54 4月 6 16:27 task.sh ``` 輸入crontab -e命令,將之前的兩條命令刪除掉,或者在前面加#號註解掉: ``` #* * * * * date >> /home/date1.txt #* * * * * cp /home/date1.txt /date2.txt * * * * * /task.sh ``` 目錄出現date3.txt,打開後內容為: ``` [root@? /]# cat date3.txt Sat Apr 6 16:15:09 CST 2013 Sat Apr 6 16:16:02 CST 2013 Sat Apr 6 16:17:01 CST 2013 Sat Apr 6 16:18:01 CST 2013 Sat Apr 6 16:19:01 CST 2013 Sat Apr 6 16:20:01 CST 2013 Sat Apr 6 16:21:01 CST 2013 Sat Apr 6 16:22:01 CST 2013 Sat Apr 6 16:23:02 CST 2013 Sat Apr 6 16:24:01 CST 2013 Sat Apr 6 16:25:01 CST 2013 Sat Apr 6 16:26:01 CST 2013 Sat Apr 6 16:27:01 CST 2013 Sat Apr 6 16:28:01 CST 2013 Sat Apr 6 16:29:01 CST 2013 Sat Apr 6 16:31:02 CST 2013 Sat Apr 6 16:32:01 CST 2013 ``` * cron服務的啟動 ``` [root@? home]# chkconfig --list | grep cron crond 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭 ``` 通過chkconfig --list | grep cron 命令來查看cron服務的啟動情況。 ****************************************** 額外參考資料: [python在CentOS所面臨的問題](https://www.iteye.com/blog/flyer0126-2388142) [Linux–CentOS定时运行Python脚本](https://blog.csdn.net/a624806998/article/details/79499523) [Install Python3 on (RHEL/CentOS)](https://www.youtube.com/watch?v=hYy7tAwH_zI)