定時任務是一個比較實用的功能,之前在爬數據的時候回用到饿这,但是當時用的是java提供的一個依賴來實現的抛丽,今天想研究一下linux的定時任務,因為平時自己寫一些小腳本的時候晌缘,有時候會半夜跑齐莲,這樣定時任務就是最好的選擇。
先聲明一下磷箕,我這里用的是ubuntu选酗,其他linux發(fā)行版可能會有點差異。安裝什么的這里就不再贅述了岳枷,因為我的ubuntu是默認自帶的芒填。
進入配置頁面:
crontab -e //執(zhí)行這條命令會出現下面的這些信息
1 # Edit this file to introduce tasks to be run by cron.
2 #
3 # Each task to run has to be defined through a single line
4 # indicating with different fields when the task will be run
5 # and what command to run for the task
6 #
7 # To define the time you can provide concrete values for
8 # minute (m), hour (h), day of month (dom), month (mon),
9 # and day of week (dow) or use '*' in these fields (for 'any').#
10 # Notice that tasks will be started based on the cron's system
11 # daemon's notion of time and timezones.
12 #
13 # Output of the crontab jobs (including errors) is sent through
14 # email to the user the crontab file belongs to (unless redirected).
15 #
16 # For example, you can run a backup of all your user accounts
17 # at 5 a.m every week with:
18 # 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
19 #
20 # For more information see the manual pages of crontab(5) and cron(8)
配置編輯器:
這里你有可能用的是nano編輯器,如果你要切換編輯器的話空繁,可以輸以下命令:
select-editor //輸入命令
output:
Select an editor. To change later, run 'select-editor'.
1. /bin/ed
2. /bin/nano <---- easiest
3. /usr/bin/vim.basic
4. /usr/bin/vim.tiny
Choose 1-4 [2]:
在這里選擇你喜歡的編輯器殿衰,這里我選的是3
自定義定時任務:
然后在crontab -e 打開的那個配置頁面進行配置定時任務就可以了:
如下:
*/1 * * * * date >> /home/vagrant/time.log
*/1 * * * * cd /home/vagrant && ./test.sh
這里面我配置了兩個定時任務,第一個定時任務就是盛泡,每隔一分鐘向后面那個目錄下的time.log這個文件里最佳此刻的時間闷祥。
第二個定時任務是,每隔一分鐘 進入后面那個路徑下饭于,然后執(zhí)行test.sh腳本蜀踏。
下面稍微解釋下crontab中每行的含義维蒙。crontab中的每一行代表一個定期執(zhí)行的任務,分為6個部分果覆。前5個部分表示何時執(zhí)行命令颅痊,最后一個部分表示執(zhí)行的命令。每個部分以空格分隔局待,除了最后一個部分(命令)可以在內部使用空格之外斑响,其他部分都不能使用空格。前5個部分分別代表:分鐘钳榨,小時舰罚,天,月薛耻,星期营罢,每個部分的取值范圍如下:
分鐘 0 - 59
小時 0 - 23
天 1 - 31
月 1 - 12
星期 0 - 6 0表示星期天
除了這些固定值外,還可以配合星號(*)饼齿,逗號(,)饲漾,和斜線(/)來表示一些其他的含義:
星號 表示任意值,比如在小時部分填寫 * 代表任意小時(每小時)
逗號 可以允許在一個部分中填寫多個值缕溉,比如在分鐘部分填寫 1,3 表示一分鐘或三分鐘
斜線 一般配合 * 使用考传,代表每隔多長時間,比如在小時部分填寫 */2 代表每隔兩分鐘证鸥。所以 */1 和 * 沒有區(qū)別
*/2 可以看成是能被2整除的任意值僚楞。
查看自定義腳本:
然后看看一下這個test.sh腳本:
#!/bin/bash
echo "test" >> /home/vagrant/time.log
可以看到這里面就是一個簡單的輸出test這個字符串到后面那個文件里。
啟動cron服務
sudo /etc/init.d/crond start
查看輸出結果:
我們過幾分鐘看一下time.log這個文件
vagrant@vagrant-ubuntu-trusty-64:~$ tail -f time.log
test
Thu Mar 23 07:22:02 UTC 2017
test
Thu Mar 23 07:23:01 UTC 2017
test
Thu Mar 23 07:24:01 UTC 2017
Thu Mar 23 07:25:01 UTC 2017
test
Thu Mar 23 07:26:01 UTC 2017
test
這里用tail -f fimename 這樣會實時刷新最新的文件信息枉层∪郑可以看到這個文件里面已經有很多信息了,都是一分鐘調用一次的返干。
注意事項:
- 文件的路徑都要用絕對路徑兴枯,這樣不會有未知的錯誤
- 接著就是執(zhí)行腳本的時候要有權限,且腳本要是可執(zhí)行的