Thursday, May 13, 2010

Linux例行性工作排程by crontab

env: Red Hat Enterprise Linux 5

如果要在linux上排定一些類似檔案備份的例行性排程,可以利用crontab這指令。

step1: 準備好要下的指令,通常都會先編一個.sh file, 像這樣:

[say_hello.sh]

#!/bin/bash

echo say hello `date` >> log.txt

    上面這個檔案會印一行say hello跟系統時間在log.txt這個檔案裡
    像這樣: say hello Wed May 12 16:20:01 CST 2010

step2: 使用crontab排程

$ crontab -e

-e是edit的意思。下了這個指令後會進入vi編輯畫面。都未曾使用過crontab的話內容就是一片空白。

step3: 新增工作排程

crontab的內容有固定格式,一個工作一行,大概長像這樣:

20 16 * * * /home/oracle/say_hello.sh

先簡單說一下這條工作內容: 每到16:20執行say_hello.sh
指令的結構是這樣(詳細說明請參閱[鳥哥]基礎文件CH16)

指令
0-59 0-23 1-31 1-12 0-7 指令=  =

這邊要注意指令裡有用到任何檔案,都要用絕對路徑。
編輯完存檔退出後,會有一行訊息: crontab: installing new crontab
表示排程已經排定。如果要檢視所有排定的工作,可以下:

$ crontab -l

step4: 就等囉~

等到已經排定的時間,你可能會發現.... 失敗了=   =,並且會收到一封mail,由root(Cron Deamon)寄出,內容最後有一行類似這樣的訊息:

/bin/sh: /home/oracle/say_hello.sh: Permission denied

permission denied… 也不知道在deny什麼鬼,因為明明可以在自己的環境裡直接下"sh /home/oracle/say_hello.sh"執行這個script。一直以為是路徑的問題(阿不就是寫完整路徑!?),改來改去就是不行。

最後發現竟然真的是權限問題,下"ls -l"可以看到新建的script檔權限長這樣:
-rw-r--r--
owner自己竟然沒權限執行.... orz||,chmod一下

$ chmod u+x /home/oracle/say_hello.sh

確認一下執行權限-rwxr--r--
再重新安排一次時間比較近的排程試試看,應該就OK囉。

linux排程初體驗,成功!!!

Ref:

  1. [鳥哥] 第十六章、例行性工作排程 (crontab)
  2. Disable The Mail Alert By Crontab Command

Comments

0 Responses to "Linux例行性工作排程by crontab"

Post a Comment

Tags