# 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)