歡迎您光臨本站 註冊首頁

Linux自啟動和定時啟動程序

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

  1.開機啟動時自動運行程序

  Linux載入后, 它將初始化硬體和設備驅動, 然後運行第一個進程init.init根據配置文件繼續引導過程, 啟動其它進程.通常情況下,修改放置在 /etc/rc或 /etc/rc.d 或 /etc/rc?.d 目錄下的腳本文件,可以使 init自動啟動其它程序.例如:編輯 /etc/rc.d/rc.local 文件,在文件最末加上一 行「xinit」或「startx」,可以在開機啟動后直接進入X-Window.

  2.登錄時自動運行程序

  用戶登錄時,bash首先自動執行系統管理員建立的全局登錄script :/ect/profile.然後bash在用戶起始 目錄下按順序查找三個特殊文件中的一個:/.bash_profile、/.bash_login、/.profile,但只執行最先找到的 一個.

  因此,只需根據實際需要在上述文件中加入命令就可以實現用戶登錄時自動運行某些程序(類似於DOS下的 Autoexec.bat).

  3.退出登錄時自動運行程序

  退出登錄時,bash自動執行個人的退出登錄腳本/.bash_logout.例如,在/.bash_logout中加入命令「tar -cvzf c.source.tgz *.c」,則在每次退出登錄時自動執行 「tar」 命令備份 *.c 文件.

  4.定期自動運行程序

  Linux有一個稱為crond的守護程序,主要功能是周期性地檢查 /var/spool/cron目錄下的一組命令文件的內 容,並在設定的時間執行這些文件中的命令.用戶可以通過crontab 命令來建立、修改、刪除這些命令文件.

  例如,建立文件crondFile,內容為「00 9 23 Jan * HappyBirthday」,運行「crontab cronFile」命令 后,每當元月23日上午9:00系統自動執行「HappyBirthday」的程序(「*」表示不管當天是星期幾).

  5.定時自動運行程序一次

  定時執行命令at 與crond 類似(但它只執行一次):命令在給定的時間執行,但不自動重複.at命令的一 般格式為:at [ -f file ] time ,在指定的時間執行file文件中所給出的所有命令.也可直接從鍵盤輸入命 令:

  $ at 12:00

  at>mailto Roger -s ″Have a lunch″ < plan.txt

  at>Ctr-D

  Job 1 at 2000-11-09 12:00

  2000-11-09 12:00時候自動發一標題為「Have a lunch」,內容為plan.txt文件內容的郵件給Roger.

  定期運行程序或者腳本是管理員要面臨一個很普遍的問題,

  一、 使用crond監控程序運行程序

  1. 使用cron來定期執行任務

  使用crond (cron監控程序)來定期運行一些任務,比如備份日誌、資料庫、把日誌發送到自己郵箱等等操作都可以又定期運行程序來完成.

  crond是個腳本,每次Linux啟動的時候都自動起到該腳本,該腳本是 /etc/rc.d/init.d 下面的,每次系統啟動的時候就自動會啟動該目錄下

  的腳本.

  cron有兩個配置文件,一個/etc/crontab,是一個全局配置文件,一組是crontab命令生成生成的配置文件,是屬於用戶級的.

  一般對管理員來說,只要使用全局配置的/etc/crontab就配置文件就可以了,我們去打開配置文件看看:

  SHELL=/bin/bash

  PATH=/sbin:/bin:/usr/sbin:/usr/bin

  MAILTO=root

  HOME=/

  # run-parts

  01 * * * * root run-parts /etc/cron.hourly

  02 4 * * * root run-parts /etc/cron.daily

  22 4 * * 0 root run-parts /etc/cron.weekly

  42 4 1 * * root run-parts /etc/cron.monthly

  我們稍微來分析一下這個文件:

  /* 設置基於什麼shell來運行,我們這裡是基於bash shell */

  SHELL=/bin/bash

  /* 指定目錄中有次文件的命令時,不需要完整目錄路經 */

  PATH=/sbin:/bin:/usr/sbin:/usr/bin

  /* 使用cron實際工作時,見通過郵件來同志root用戶 */

  MAILTO=root

  /* 與/etc/crontab配置文件相關的主目錄為根目錄 */

  HOME=/

  /* 好了,這裡是關鍵是,下面的是要指定什麼時間運行什麼目錄下的任務,run-parts命令是運行指定目錄下的每個腳本 */

  # run-parts

  /* 這一句是在每天每小時過後一分鐘運行/etc/cron.hourly目錄中的每個腳本文件 */

  01 * * * * root run-parts /etc/cron.hourly

  /* 在每天凌晨4點2分運行/etc/cron.daily目錄中的每個腳本文件 */

  02 4 * * * root run-parts /etc/cron.daily

  /* 在每個星期天凌晨4點22分運行/etc/cron.weekly目錄中的每個腳本文件 */

  22 4 * * 0 root run-parts /etc/cron.weekly

  /* 在每個月的第一天凌晨4點42分運行/etc/cron.monthly目錄中的每個腳本文件 */

  42 4 1 * * root run-parts /etc/cron.monthly

  大家看到裡面的「*」一定覺得很奇怪,下面我們句稍微來了解一下cron的語法:

  上面腳本中的時間是從左到右的,分別列出了五個欄位,我們看下面的表:

  ------------------------------------------------

  欄位 取值範圍

  ------------------------------------------------

  Minute 0 ~ 59

  Hour 0 ~ 23,其中0是午夜,20是晚上8點

  Day 1 ~ 31

  Month 1 ~ 12

  Day of week 0 ~ 7,其中0和7是表示星期天

  ------------------------------------------------

  任何欄位中的星號是通配符,例如,如果第一個欄位包括星號,則特定若無其事在可能的每一分鐘運行.如果要指定時間範圍,比如上午8點到

  下午4點,則可以見第二個欄位設置為8~16.如果要隔一天運行任務,則可以將第三個欄位設置為*/2.可以看出,如果五個欄位(minute、hour

  、day、month、day of week) 之後,cron中的每個欄位就沒什麼神秘之處了.

  2. 用戶自己的cron

  用戶也可以計劃用戶自己的cron任務,比如他想要在半夜整理他的文件,然後發送郵件給自己,只要這個用戶他沒有在/etc/cron.deny表中,

  就可以使用crontab -e命令來啟動自己的cron文件.

  3. 對cron的訪問控制

  默認情況下,所有用戶都能訪問cron工具,要對cron進行訪問控制,則可以生成/etc/cron.allow與/etc/cron.deny文件.

  (1)這兩個文件都不存在時,每個用戶都可以訪問cron工具]

  (2)存在/etc/cron.allow文件時,則只有cron.allow文件中允許的用戶才能訪問cron工具,如果也有/etc/cron.deny文件,則忽略cron.deny文

  件

  二、 使用at命令定期運行程序

  1. 使用cron運行任務

  cron任務的缺點是計劃要經常運行,假如我們只是想要讓特定任務運行一次呢?那麼,這時候就要用到at監控程序了.

  設置at命令很簡單,指示定運行的時間,那麼就會在哪個時候運行.at類似列印進程,會把任務放到/var/spool/at目錄中,到指定時間運行它

  .at命令相當於另一個shell,運行at time命令時,它發送一個個命令,可以輸入任意命令或者程序.at now time命令可以在指示任務.

  假設處理一個大型資料庫,要在別人不用系統時去處理數據,比如凌晨2點5分.那麼我們就應該先建立/home/mj/airplane腳本管理資料庫,計

  划處理/home/mj/air-safe文件中的結果.正常方式是這樣啟動下列命令:

  # at 2:05 tomorrow

  at> /home/mj/airplane > /home/mj/air-safe

  at> Ctrl D

  AT Time中的時間表示方法

  -----------------------------------------------------------------------

  時間 例子 說明

  -----------------------------------------------------------------------

  Minute at now 5 minutes 任務在5分鐘后運行

  Hour at now 1 hour 任務在1小時后運行

  Days at now 3 days 任務在3天後運行

  Weeks at now 2 weeks 任務在兩周后運行

  Fixed at midnight 任務在午夜運行

  Fixed at 10:30pm 任務在晚上10點30分開始

  Fixed at 1:00 12/20/04 任務在2004年12月20日凌晨1點開始

  -----------------------------------------------------------------------

  2. 查看目前在等待執行的任務

  輸入任務后,可以使用atq命令可以看到目前等待執行的任務,輸出提供了任務號、用戶和任務執行時間等信息.

  # atq

  8 2004-12-15 02:05 a mj

  裡面的a表示是at任務還是batch命令生成的任務.

  3. 刪除at任務

  刪除一個at任務比較簡單,使用atrm命令就可以輕鬆解決.

  比如我知道了任務的隊列號,那麼就可以刪除它:

  # atrm 8

  就刪除了隊列號為8的at任務了.

  三、batch命令處理批處理任務

  這個具體就不說了,該命令類似 at -q b,詳細請參考下面的連接:

  linuxts.com/doc/rhl-cg-zh_CN-9/s1-autotasks-at-batch.html">http://www.linuxts.com/doc/rhl-cg-zh_CN-9/s1-autotasks-at-batch.html

  [root@pps ~]# mail -s "hi, snail, i'm root" snail < 郵件內容

  -s 主題

  -c 抄送

  -b 暗送

  mail的使用:

  Usage: mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] to-addr ...

  [-- sendmail-options ...]

  mail [-iInNv] -f [name]

  mail [-iInNv] [-u user]

  詳細的mail使用說明可以 # man mail

  經常用root帳號登錄RHEL5,在終端經常出現:

  You have new mail in /var/spool/mail/root

  這肯定是系統給root超級管理員發的一些通知郵件,我常用mail命令來查看.

  【注意】下面mail命令的help幫助是我個人隨便翻譯的,準確的請看英文說明

  [root@pps mail]# mail

  Mail version 8.1 6/6/93. Type ? for help.

  "/var/spool/mail/root": 24 messages 24 unread

  >U 1 logwatch@rhel5-pps.h Mon Feb 16 17:27 117/3862 "Logwatch for rhel5-pp"

  U 2 logwatch@rhel5-pps.h Mon Feb 16 17:27 107/3658 "Logwatch for rhel5-pp"

  ...

  U 20 logwatch@pps.hoho.co Wed Mar 11 10:10 139/4567 "Logwatch for pps.hoho"

  U 21 root@pps.hoho.com Wed Mar 11 13:15 20/664 "Re: Warning: could no"

  U 22 MAILER-DAEMON@pps.ho Wed Mar 11 13:15 71/2294 "Returned mail: see tr"

  & help //如果不會使用或者忘記了什麼命令,就輸入 help 或者 ? 來獲取幫助

  Mail Commands

  t <message list> 列印出信息 【注意】多個信息用空格分開,如 t 1 7

  n 列印出下一條信息

  e <message list> 編輯信息

  f <message list> 輸出信息的頭行

  d <message list> 刪除信息

  s <message list> file 追加信息到文件file

  u <message list> 不刪除某信息

  R <message list> 回複發件人

  r <message list> 回複發件人和本信息所有的收件人

  pre <message list> 保留信息在 /usr/spool/mail 1*

  m <user list> 發郵件,多個收件人用空格分開【需要sendmail支持】

  q quit, saving unresolved messages in mbox 2*

  x quit, do not remove system mailbox

  h print out active message headers

  ! 讓shell執行某命令,如 !ls 輸出ls命令結果

  cd [directory] 改變目錄,這裡不用 !cd,但列印當前目錄需要 !pwd

  A <message list> consists of integers, ranges of same, or user names separated

  by spaces. If omitted, Mail uses the last message typed.

  A <user list> consists of user names or aliases separated by spaces.

  Aliases are defined in .mailrc in your home directory.

  1* 如果閱讀過某信息,執行q退出時候,mail會把閱讀過的信息「取回」放在 ~/mbox,執行pre后就不取回.如果退出時執行x命令則不會取回信息.

  2* 這三句不難理解,但不好翻譯(本人水平問題),也就保留原文了

  所支持的全部命令列表:

  & l

  Commands are:

  next, alias, print, type, Type, Print, visual, top, touch, preserve,

  delete, dp, dt, undelete, unset, mail, mbox, more, page, More, Page,

  unread, U, !, copy, chdir, cd, save, source, set, shell, version,

  group, write, from, file, folder, folders, ?, z, headers, help, =,

  Reply, Respond, reply, respond, edit, echo, quit, list, xit, exit,

  size, hold, if, else, endif, alternates, ignore, discard, retain,

  saveignore, savediscard, saveretain, core, #, clobber

  & t 7 //閱讀第7封信息,閱讀時,按空格鍵就是翻頁,按回車鍵就是下移一行

  & d 10 //刪除第10封信息

  & d 10-100 //刪除第10-100封信息

  & top //顯示當前指針所在的郵件的郵件頭

  & file //顯示系統郵件所在的文件,以及郵件總數等信息

  & x //退出mail命令平台,並不保存之前的操作,比如刪除郵件

  & q //退出mail命令平台,保存之前的操作,比如刪除已用d刪除的郵件,

  //已閱讀郵件會轉存到當前用戶家目錄下的mbox文件中

  //如果在mbox中刪除文件才會徹底刪除.

  如果郵件被收取放到 ~/mbox 可以這樣查看它們:

  # mail -f ~/mbox

  進入 mail 程序后的操作都很簡單,但是可以不進入 mail 的 & 操作提示符界面,下面舉幾個實用例子:

  1、給 snailwarrior@qq.com 發信

  [root@pps ~]# mail snailwarrior@qq.com

  Subject: Hi, a mail to snailwarrior!

  This is hoho_zhao in BeiJing.

  .

  Cc: <Enter> //直接輸入回車就不抄送給誰了

  【注意】使用.或者Ctrl D來結束內容輸入

  【注意】默認情況下連按兩次Ctrl C鍵中斷工作

  2、如果 snail 是本系統用戶,這樣給他發信

  [root@pps ~]# mail -s "hi, snail, i'm root" snail

  plz reply me, snail.

  .

  Cc:

  或者

  [root@pps ~]# mail -s "hi, snail, i'm root" snail < 郵件內容

  -s 主題

  -c 抄送

  -b 暗送

  mail的使用:

  Usage: mail [-iInv] [-s subject] [-c cc-addr] [-b bcc-addr] to-addr ...

  [-- sendmail-options ...]

  mail [-iInNv] -f [name]

  mail [-iInNv] [-u user]

  詳細的mail使用說明可以 # man mail

  文件 用途

  /var/spool/mail/* 郵局(Post office)

  ~/mbox 用戶老郵件

  ~/.mailrc mail的初始化命令.只有在mail使用者是這個文件的所有者時

  候才執行此文件里的mail初始化命令

  /tmp/R* 臨時文件

  /usr/lib/mail.*help 幫助文件

  /etc/mail.rc mail系統初始化文件

  mail的還得靠sendmail來投遞郵件,根據網上資料可以這樣查看sendmail是否有郵件待發,如果沒有,說明郵件全都發送出去了.(當然你的sendmail服務要開著)

  [root@pps ~]# sendmail -bp

  /var/spool/mqueue is empty

  Total requests: 0


[火星人 ] Linux自啟動和定時啟動程序已經有783次圍觀

http://coctec.com/docs/linux/show-post-50171.html