Linux、UNIX設置開機自動運行命令、腳本配置


一般我們不建議人工部署開機自動啟動的腳本。而是建議通過crontab 部署腳本監控,理由如下:

 

1.自動開機部署腳本不好定位問題,有可能導致主機重啟過慢。

2.自動開機部署腳本不好定位問題,有可能導致主機無法打開對應的服務。無法telnet 主機

 詳細描述如下:issue 2

http://www.cnblogs.com/feiyun8616/p/7880506.html

3.因此本文以下方法僅供學習,不要在生產環境下設置。

 

 

sampe 1:1583118.1

1.  As "root" use create a wrapper/init script which calls the OSWatcher startup script (startOSWbb.sh).  Here is an example of such script named OSW_init.sh.  Please note that this example wrapper script is calling the OSWatcher startup script with default options.  Pass the required parameters as desired and refer to OSWatcher User Guide using MoS Document 1531223.1.  This script needs to be created under /etc/init.d:

# uname -a
SunOS orasol10 5.10 Generic_147148-26


# pwd
/etc/init.d
# cat OSW_init.sh
 OSW_SRC_DIR=/u01/app/OSW <<<<----- Modify this to reflect your OSW source directory
echo $OSW_SRC_DIR
echo "******************************************************" >> $OSW_SRC_DIR/init_osw.log


case $1 in
'start')
echo "...Starting OSWBB from init at `date` " >> $OSWBB_SRC_DIR/init_osw.log
cd $OSW_SRC_DIR;
./startOSWbb.sh
;;
'stop')
echo "...Stopping OSWBB from init at `date` " >> $OSWBB_SRC_DIR/init_osw.log
cd $OSW_SRC_DIR;
./stopOSWbb.sh
;;
*)
echo "Usage: $0 start|stop" >&2
exit 1
;;
esac
exit 0

  

2.  Add "execute" permissions on this script:

#chmod +x OSW_init.sh


3.  Create a soft link to this script from /etc/rc3.d:

ln -s /etc/init.d/OSW_init.sh /etc/rc3.d/S90StartOSW_init


The wrapper script (OSW_init.sh) would be called with "start" option/parameter on each startup.

4.  Similarly, create another soft link to the same script from /etc/rc0.d:

ln -s /etc/init.d/OSW_init.sh /etc/rc0.d/K30StopOSWBB_init
ln -s /etc/init.d/OSW_init.sh /etc/rc3.d/K30StopOSWBB_init

 The wrapper script (OSW_init.sh) would be called with "stop" option/parameter on each shutdown.

5. A log file will be created/appended to in your OSWbb Source directory with information similar to the following on each reboot:

$ tail -f init_osw.log
...Stopping OSW from init at Tue Sep 10 20:57:26 CDT 2013
******************************************************
...Starting OSW from init at Tue Sep 10 21:00:04 CDT 2013
******************************************************
...Stopping OSW from init at Tue Sep 10 21:16:17 CDT 2013
******************************************************
...Starting OSW from init at Tue Sep 10 21:17:26 CDT 2013

 

Note:
Trace File Analyzer(TFA) Collector, a diagnostic collection utility, contains many tools including OSWatcher and will also automate startup of the OSWatcher
For information see:
Document 1513912.1 TFA Collector - Tool for Enhanced Diagnostic Gathering
 
 
 
 
sampe 2: for linux  (文檔 ID 1674210.1)

SYMPTOMS

When installing the RPM oswbb-service-1.1.7-1.noarch.rpm for autostartup it fails with the following error:

 (missing " on line 45) in file /usr/libexec/oswbb-service/oswbb-helper.

 

CAUSE

 There is problem in RPM code of oswbb-service-1.1.7-1.noarch.rpm

SOLUTION

Workaround

change the below line in the oswbb-helper file
"${OSW_ARCHIVE}/heartbeat 2>&1 &
   

to 
"${OSW_ARCHIVE}"/heartbeat 2>&1 &
  

 

Or

Download the latest RPM from the document below:

 

 

 

 

 

說明:

 

第一章 AIX開機啟動過程介紹
----------------------------
不從最開始說起了,只說從AIX kernel被裝載到內存開始。
1、AIX系統存儲在BLV的kernel在內存中創建/(root),/usr/和/var文件系統。
要注意,這里所說的文件系統,包括kernel在啟動過程中都是存儲在RAM(內存)中的。
他們沒有權限訪問BLV之外的任何內容。
2、文件系統被裝載到RAM之后,kernel開始執行init進程,這個時候init進程開始接管系統啟動進程。
3、AIX kernel把init進程的PID設為1,這個進程是作為parent,root進程存在的,是AIX系統中運行的其他所有進程的父進程.當init進程被裝載並在啟動過程運行,init調用rc.boot.
4、rc.boot文件在AIX系統啟動過程中有三個重要的作用。
(1)、第一部分是rc.boot初始化了系統的硬件,使其為系統的啟動做好准備。通過系統設置命令cfgmgr,一小部分系統啟動需要的驅動被配置。
(2)、第二部分是文件系統/,/usr,/var和頁面空間被裝載。在這些文件系統被裝載以后,init被硬盤上的PID為1的init進程所替代,同時RAM被清空。
(3)、第三部分和最后部分,rc.boot,實際的init進程是從硬盤上運行的。
當init被執行后,/etc/inittab文件被堵去,同時里面的每一條都被執行。
在這個過程中,/tmp文件系統正被裝載到硬盤上。
現在,系統正在啟動的最后過程中,cfgmgr命令再一次運行把剩下的在第一部分沒有被rc.boot運行的驅動運行起來。
5、init進程被執行以后,下一步就是init會打開/etc/inittab,並且執行里面的內容。

----------------------------------------------
第二章 AIX啟動的相關命令知識
----------------------------------------------
1、確認當前系統的運行級別
      在系統維護或者切換系統運行級別之前,你也許需要檢查當前系統的運行級別。
       cat /etc/.init.state
        lsitab init

2、顯示系統運行級別的更改紀錄
     提示:確保bosext2.acct.obj 代碼安裝在你的系統上。
      (1) 以root身份登陸系統.
      (2)執行/usr/lib/acct/fwtmp </var/adm/wtmp |grep run-level
         得到類似的結果:
        run-level 2 0 1 0062 0123 697081013 Sun Feb 2 19:36:53 CST 1992
         run-level 2 0 1 0062 0123 697092441 Sun Feb 2 22:47:21 CST 1992
         run-level 4 0 1 0062 0123 698180044 Sat Feb 15 12:54:04 CST 1992

3、改變系統運行級別基礎知識
當系統第一次啟動之后,系統按照/etc/inittab文件的內容,進入默認的系統運行級別,直到系統管理員發出改變系統級別的命令。
下面是系統定義的系統運行級別:
0-9 當init命令改變系統運行級別為0-9時,將會殺掉當前系統級別下正在運行的所有進程,並進入新的系統運行級別。
0-1 為未來的操作系統保留
2 默認運行級別
3-9 可以根據用戶的需求進行自定義
a,b,c 當init命令接收到運行a,b或者c的時候,init命令不殺死任何當前運行的進程,只是啟動新運行級別內定義的新進程。
Q,q init命令將會重新檢查/etc/inittab文件
S、s 維護模式
M、m 維護模式

4、改變系統運行級別
(1)、檢查/etc/inittab文件,確認你想改變的系統運行級別。
(2)、使用wall命令通知所有用戶你將改變
(3)、使用smit telinit快速改變系統運行級別
(4)、使用init n或者telinit n命令改變系統運行級別,其中n為系統運行級別。

5、改變/etc/inittab文件
在有些情況下,你需要增加、改變、列出、刪除/etc/inittab文件中的記錄。/etc/inittab文件定義了哪些進程在哪個系統運行級別里運行。
當你運行init命令的時候,它將讀取/etc/inittab文件。每一條記錄定義了一個進程在一個進程的運行。
(1)、/etc/inittab文件參數
1.1 Identifier 定義了唯一的標識(1到14個字符)。
1.2 Run Level 定義了進程所在的運行級別(1到20個字符)。 1.3 Action 定義了init命令將為此條進程執行的操作,包括:respawn,wait,once,boot,bootwait,powerfail,powerwait,off,hold,ondemand,initdefault和sysinit.
respawn 如果進程不存在,Start這個進程,不等待它的結束,繼續掃描inittab文件。如果這個進程結束了,restart它。
wait Start這個進程,並且等待它的結束。
once Start這個進程,並且不等待它的結束。如果這個進程結束,不restart它。
boot 僅在系統重啟時執行。
bootwait 當服務第一次從單用戶變為多用戶時執行
powerfail 僅當如果init收到一條power錯誤時執行命令
powerwait 僅當如果init收到一條power錯誤時執行命令,同時一直等待進程的結束,然后才繼續掃描inittab文件。
off 如果進程正在運行,發出SIGTERM信號,然后在20秒內執行SIGKILL
ondemand 這個參數等同於respawn,但是只在a,b,c級別運行。
initdefault 只有當init初始化執行,才掃描內容。
sysinit 在登陸前,在init得到權限控制之前執行內容。
1.4 Command 包含需要執行的shell命令。
(2)、下面的命令可以支持對/etc/inittab文件進行操作。
chitab 改變/etc/inittab文件的記錄。
lsitab 列出/etc/inittab文件的記錄。
mkitab 往/etc/inittab文件里增加記錄。
rmitab 從/etc/inittab文件里刪除記錄。
(3)、命令舉例
增加紀錄,往/etc/inittab文件里增加一條記錄,執行
mkitab Identifier:Run Level:Action:Command
例如:tty002:2:respawn:/usr/sbin/getty /dev/tty2
改變記錄,改變/etc/inittab文件里的一條記錄,執行
chitab Identifier:Run Level:Action:Command
例如:將上例的運行級別從2改為2和3,chitab tty002:23:respawn:/usr/sbin/getty /dev/tty2
列出記錄,列出/etc/inittab文件中的所有記錄
lsitab -a
列出某個指定的記錄
lsitab Identifier
例如:lsitab tty2
刪除記錄
rmitab Identifier
例如:rmitab tty2

6、執行運行級別腳本
運行級別腳本允許用戶在更改運行級別時啟動和停止所選擇的應用程序。以 K 開頭的腳本是停止腳本,以 S 開頭的腳本是啟動腳本。
這些腳本保存於它們所從屬的運行級別的特定子目錄中,每個子目錄的格式為 rcn.d,其中 n 表示運行級別:
/etc/rc.d/rc2.d
/etc/rc.d/rc3.d
/etc/rc.d/rc4.d
/etc/rc.d/rc5.d
/etc/rc.d/rc6.d
/etc/rc.d/rc7.d
/etc/rc.d/rc8.d
/etc/rc.d/rc9.d
---------------------------------------
第三章 開機自動運行程序
---------------------------------------
     開機啟動程序的方法有很多,我只談談思路,然后給出一些解決方法。
     從第一章AIX系統啟動過程,我們知道AIX系統在啟動過程中,會掃描inittab文件的內容,並執行它。
       1、那么,我們可以通過直接修改inittab文件,使系統在開機重啟時運行我們的命令。
       2、也可以通過inittab文件里指向的腳本(rc.local、rc.d組,后面會詳細介紹)。
                    間接使系統在開機重啟時運行我們的命令。
       3、其他方法:如使用crontab的定時任務功能,間接啟動腳本,
                   這種方法不是開機后馬上運行,要看crontab里設置的時間間隔的長短而定。
       
一、通過rc.local啟動(最簡單的方法)
   rc.local是inittab里的一個腳本指向,通過運行lsitab -a|grep rc.local ,我們可以得到rc.local:2:once:/etc/rc.local > /dev/console 2>&1 
    1、 mkitab -i rcnfs "rc.local:2:once:/etc/rc.local > /dev/console 2>&1"   #如果inittab文件里沒有關於rc.local的信息,可以通過此命令創建腳本。
            注意系統運行級別要與你想要運行的系統運行級別一致,這里系統運行級別是2。
    2、touch /etc/rc.local #新建rc.local文件
    3、chmod 700 /etc/rc.local #設置執行權限
    4、把執行腳本放到/etc/rc.local里之后,AIX系統在重新啟動時,就會運行/etc/rc.local里的腳本了。

二、通過/etc/rc.d腳本啟動(需要編寫start\stop腳本)
    /etc/rc.d是inittab里的一組腳本指向,通過運行lsitab -a|grep rc.d,我們得到
      l2:2:wait:/etc/rc.d/rc 2 
      l3:3:wait:/etc/rc.d/rc 3 
      l4:4:wait:/etc/rc.d/rc 4 
      l5:5:wait:/etc/rc.d/rc 5 
      l6:6:wait:/etc/rc.d/rc 6 
      l7:7:wait:/etc/rc.d/rc 7 
      l8:8:wait:/etc/rc.d/rc 8 
      l9:9:wait:/etc/rc.d/rc 9 
   1、cd /etc/rc.d/       #進入/etc/rc.d目錄
   2、cd /samples       #進入/etc/rc.d/samples 目錄,可以得到K70lpd、README.txt、S70lpd三個文件。
           這里只是簡單的模仿K70lpd和S70lpd,更高級的方法,留給大家自己研究了。
           下面,我們分別創建自己的啟動和結束腳本。
                 例如:
# more K69oa
#!/bin/ksh
##################################################
# name: K69oa
# purpose: sample script that start or stop oa.
##################################################

case "$1" in
start )
        WebSphere/AppServer/bin/startServer.sh server1
        IBMHttpServer/bin/apachectl start
        ;;
stop )
        WebSphere/AppServer/bin/stopServer.sh server1
        IBMHttpServer/bin/apachectl stop
        ;;
* )
        echo "Usage: $0 (start | stop)"
        exit 1
esac

# more S69oa
#!/bin/ksh
##################################################
# name: S69oa
# purpose: sample script that start or stop oa.
##################################################

case "$1" in
start )
        WebSphere/AppServer/bin/startServer.sh server1
        IBMHttpServer/bin/apachectl start
        ;;
stop )
        WebSphere/AppServer/bin/stopServer.sh server1
        IBMHttpServer/bin/apachectl stop
        ;;
* )
        echo "Usage: $0 (start | stop)"
        exit 1
esac
      
    3、chmod 700 這兩個腳本
    4、把這兩個腳本放到/etc/rc.d/rc2 下。
    5、使用shutdown -rF重新啟動機器時,會自動運行放在/etc/rc.d/rc2下的S69oa腳本中的stop部分;

            系統重啟之后,系統會自動運行放在/etc/rc.d/rc2下的S69oa腳本中的start部分。

 

FROM:http://k0521klb.iteye.com/blog/1306474

 
 

本文如無特殊解釋,init.d指的就是/etc/rc.d/init.d目錄。

本文包括3部分內容
1、        Linux的引導過程
2、        運行級別
3、        /etc/rc.d/ 與/etc/rc.d/init.d的關系
都僅限於自身的理解,如有差錯和不足的地方請指正和補充!一起學習,一起進步。

        “/etc/rc.d/init.d/目錄下的腳本就類似與windows中的注冊表,在系統啟動的時候某些指定腳本將被執行”。開始之前,先引用李善明經理昨天晚上總結時的一個理解,讓大家先對init.d目錄有個大概的印象。在進入init.d之前,我們一起來做兩個准備工作,linux的引導過程和運行級別的概念。

一、        Linux的引導過程
系統啟動之后,在進入init.d之前,我們先來看看系統都做了什么工作,先看看一個圖(此圖來自網絡)

 

    從這個圖中,我們從比較高的角度去看開始引導的整個過程,比較清晰明了。系統加電之后,首先進行的硬件自檢,然后是bootloader對系統的初始化,加載內核。
    內核被加載到內存中之后,就開始執行了。一旦內核啟動運行,對硬件的檢測就會決定需要對哪些設備驅動程序進行初始化。從這里開始,內核就能夠掛裝根文件系統(這個過程類似於Windows識別並存取C盤的過程)。內核掛裝了根文件系統,並已初始化所有的設備驅動程序和數據結構等之后,就通過啟動一個叫init的用戶級程序,完成引導進程。

二、        運行級別(run level)
    Init進程是系統啟動之后的第一個用戶進程,所以它的pid(進程編號)始終為1。init進程上來首先做的事是去讀取/etc/目錄下inittab文件中initdefault id值,這個值稱為運行級別(run-level)。它決定了系統啟動之后運行於什么級別。運行級別決定了系統啟動的絕大部分行為和目的。這個級別從0到6 ,具有不同的功能。不同的運行級定義如下: 
  # 0 - 停機(千萬別把initdefault設置為0,否則系統永遠無法啟動)
  # 1 - 單用戶模式
  # 2 - 多用戶,沒有 NFS
  # 3 - 完全多用戶模式(標准的運行級)
  # 4 – 系統保留的
  # 5 - X11 (x window)
  # 6 - 重新啟動 (千萬不要把initdefault 設置為6,否則將一直在重啟 )

 

這是兩個表較常用運行級別,左圖redhat9 級別3啟動的將是文本界面,右圖fc7級別5啟動的將是圖形界面。

三、        /etc/rc.d/與/etc/rc.d/init.d的關系
    寫到這里,應該差不多要進入init.d了,可是我覺得單寫/etc/rc.d/init.d的話不一定能說得清楚明白,就拿它跟/etc/rc.d這個它上一級的目錄一起來討論,可能比較合適一些,因為他們之間有着千絲萬縷的關系。
    在這里先解釋一下init.d里面放的都是什么東西。這個目錄存放的是一些腳本,一般是linux以rpm包安裝時設定的一些服務的啟動腳本。系統在安裝時裝了好多rpm包,這里面就有很多對應的腳本。執行這些腳本可以用來啟動,停止,重啟這些服務。
前面說到,/etc/rc.d/init.d這個目錄下的腳本就類似與windows中的注冊表,在系統啟動的時候執行。程序運行到這里(init進程讀取了運行級別),相信從命名的角度大家也能猜到該運行/etc/rc.d/init.d里面的腳本了,不然它為什么也叫init(.d)呢是吧。沒錯,是該運行init.d里的腳本了,但是並不是直接運行,而是有選擇的因為系統並不需要啟動所有的服務。
    那么,系統是如何選擇哪些需要啟動哪些不要呢?這時剛才說的運行級別就起作用了。
    在決定了系統啟動的run level之后,/etc/rc.d/rc這個腳本先執行。在RH9和FC7的源碼中它都是一上來就check_runlevel()(雖然實現的代碼不一樣,也大同小異),知道了運行級別之后,對於每一個運行級別,在rc.d下都有一個子目錄分別是rc0.d,rc1.d ….. rc6.d。每個目錄下都是到init.d目錄的一部分腳本一些鏈接。每個級別要執行哪些服務就在相對應的目錄下,比如級別5要啟動的服務就都放在rc5.d下,但是放在這個rc5.d下的都是一些鏈接文件,鏈接到init.d中相對應的文件,真正干活的init.d里的腳本。

redhat9    ls


fc7          ls -l


    這樣看的就很清楚了。

    到這里,估計大家可能都比較清楚了,我開始也以為是這樣的。可是后來我仔細看過和比較這些鏈接文件和init.d里真正被執行的腳本的文件名之后,一直有幾個問題沒弄明白。借着寫這個文章的機會,我做了一些功課,總算是大概解開了那些疑惑。
1、這些鏈接文件前面為什么會帶一個Kxx或者Sxx呢?
    是這樣的,帶K的表示停止(Kill)一個服務,S表示開啟(Start)的意思
2、K和S后面帶的數字呢?干什么用的
    這個我開始的時候還以為是排列起來好看或者數數用呢(是不是很幼稚?)。后來發現不是的。它的作用是用來排序,就是決定這些腳本執行的順序,數值小的先執行,數值大的后執行。很多時候這些執行順序是很重要的,比如要啟動Apache服務,就必須先配置網絡接口,不然一個沒有IP的機子來啟動http服務那豈不是很搞笑。。。
3、無意中我發現同一個服務帶S的和帶K的鏈接到init.d之后是同一個腳本。我就納悶了,為什么會是執行同一個腳本呢?
    這個時候真是S和K的妙用了,原來S和K並不止是用來看起來分的清楚而已。S給和K還分別給init.d下面的腳本傳遞了start和stop的參數。哦,是這樣的(煥然大悟的樣子,呵呵)!這時我才想起來原來曾經無數用過的/etc/rc.d/init.d/network restart命令。原來傳S時相當於執行了/etc/rc.d/init.d/xxx start這條命令,當然K就相當於/etc/rc.d/init.d/xxx stop了。

 

 

 

轉 http://blog.itpub.net/23135684/viewspace-668924/

 

 

 

 

方法一:
編輯/etc/rc.d/rc.local
加入要執行的命令。
如:
[root@rhel5 rc.d]# cat rc.local
#!/bin/sh
#
# This script. will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style. init stuff.

touch /var/lock/subsys/local
vncserver :1

注意:
此種方法只適合在linux上試用,其他HP,AIX並不使用。以下的2種方法相對來說是通用的,其他UNIX系統同樣適用。

 

 

Linux開機自動啟動ORACLE設置

1.安裝好Oracle數據庫后: 執行 dbstart和dbshut會提示:

[oracle@oracle11g ~]$ dbstart
ORACLE_HOME_LISTNER is not SET, unable to auto-start Oracle Net Listener
Usage: /u01/app/oracle/oracle/product/10.2.0/db_1/bin/dbstart ORACLE_HOME

錯誤原因是:dbstart和dbshut腳本文件中ORACLE_HOME_LISTNER的設置有問題,分別打開兩個文件找到:ORACLE_HOME_LISTNER=$1,修改為

2.如何在Linux啟動時自動啟動Oracle監聽和實例

首先要解決上面的問題,才能繼續喲! 

第一步:修改/etc/oratab文件,命令如下:

[oracle@oracle11g ~]$ vi /etc/oratab

找到:accp:/u01/oracle:N   修改為: accp:/u01/oracle:Y

第二步:把lsnrctl start和dbstart添加到rc.local文件中,命令如下:

[oracle@oracle11g ~]$ vi /etc/rc.d/rc.local

添加:

su oracle -lc "/u01/oracle/bin/lsnrctl start"

su oracle -lc  /u01/oracle/bin/dbstart

注意:第一個命令有空格,所以要用引號的 

重啟試試吧!

文章可以轉載,必須以鏈接形式標明出處。
(https://www.cnblogs.com/andy6/p/5723436.html)

在使用第二種、第三種方法之前需要了解一下inittab配置文件。
http://space.itpub.net/370491/viewspace-216955


方法二:
1.在/etc/init.d/下創建一個文件test,加入執行內容。
2.修改執行權限:
chown 777 test
3.創建鏈接:
ln -s /etc/init.d/test /etc/rc.d/rc3.d/S900test

注意:
1.注意對test文件加入執行權限。
2.在創建鏈接的時候一定使用絕對路徑。
3.此種方法的重點並不在於test存放在/etc/init.d目錄下(一般我們將要隨系統自動啟動的腳本都放在此目錄下),而是創建的鏈接文件S900test放在/etc/rc.d/rc3.d目錄下。
原因:
1.運行級別:
[root@rhel5 rc.d]# runlevel
N 3

2.inittab默認配置:
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3 (啟動時會等待將/etc/rc.d/rc3.d目錄下的所有命令執行完成。)
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

方法三:
這種方法跟上一種方法其實本質是相同的,都是源自inittab配置文件。
可以直接修改/etc/inittab
加入:
test:35:wait:/bin/echo "123456" > /aaa 2>&1

這樣在啟動時系統也會等待/bin/echo "123456"命令執行結束。

注意:
1.:wait:為關鍵字,意為等待命令執行結束。不要寫成其他或者寫錯了。
2.在使用命令或寫執行腳本的時候,最后執行絕對路徑。如/bin/echo 而不要光寫個echo。

 

 

################

 

查看初始運行級別:
grep initdefault /etc/inittab

檢查系統自啟動的程序
aix:
cat /etc/inittab
ls -ltr /etc/rc.d/rc2.d

linux
cat /etc/inittab
ls -ltr /etc/rc5.d


hp:
cat /etc/inittab
ls -tlr /sbin/rc2.d


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM