定時任務(wù)是一個比較實(shí)用的功能,之前在爬數(shù)據(jù)的時候回用到,但是當(dāng)時用的是java提供的一個依賴來實(shí)現(xiàn)的,今天想研究一下linux的定時任務(wù),因?yàn)槠綍r自己寫一些小腳本的時候,有時候會半夜跑,這樣定時任務(wù)就是最好的選擇。
先聲明一下,我這里用的是ubuntu,其他linux發(fā)行版可能會有點(diǎn)差異。安裝什么的這里就不再贅述了,因?yàn)槲业膗buntu是默認(rèn)自帶的。
進(jìn)入配置頁面:
crontab -e //執(zhí)行這條命令會出現(xiàn)下面的這些信息
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
自定義定時任務(wù):
然后在crontab -e 打開的那個配置頁面進(jìn)行配置定時任務(wù)就可以了:
如下:
*/1 * * * * date >> /home/vagrant/time.log
*/1 * * * * cd /home/vagrant && ./test.sh
這里面我配置了兩個定時任務(wù),第一個定時任務(wù)就是,每隔一分鐘向后面那個目錄下的time.log這個文件里最佳此刻的時間。
第二個定時任務(wù)是,每隔一分鐘 進(jìn)入后面那個路徑下,然后執(zhí)行test.sh腳本。
下面稍微解釋下crontab中每行的含義。crontab中的每一行代表一個定期執(zhí)行的任務(wù),分為6個部分。前5個部分表示何時執(zhí)行命令,最后一個部分表示執(zhí)行的命令。每個部分以空格分隔,除了最后一個部分(命令)可以在內(nèi)部使用空格之外,其他部分都不能使用空格。前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服務(wù)
sudo /etc/init.d/crond start
查看輸出結(jié)果:
我們過幾分鐘看一下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 這樣會實(shí)時刷新最新的文件信息??梢钥吹竭@個文件里面已經(jīng)有很多信息了,都是一分鐘調(diào)用一次的。
注意事項(xiàng):
- 文件的路徑都要用絕對路徑,這樣不會有未知的錯誤
- 接著就是執(zhí)行腳本的時候要有權(quán)限,且腳本要是可執(zhí)行的