當前位置:首頁 » 網頁前端 » initd加腳本不起作用
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

initd加腳本不起作用

發布時間: 2023-06-05 13:49:23

A. 為什麼我寫的systemd腳本不工作

Systemd服務的內容主要分為三個部分,控制單元(unit)的定義、服務(service)的定義、以及安裝部分。和SysVinit腳本的差異過去,*nix服務(守護精靈)都是用SysV啟動腳本啟動的。SysV啟動腳本就是Bash腳本,通常在/etc/init.d目錄下,可以被一些標准參數如start,stop,restart等調用。啟動該腳本通常意味著啟動一個後台守護精靈(daemon)。shell腳本常見的缺點就是,慢、可讀性不強、太詳細又很傲嬌。雖然它們很靈活(畢竟那就是代碼呀),但是有些事只用腳本做還是顯得太困難了,比如安排並列執行、正確監視進程,或者配置詳細執行環境。SysV啟動腳本還有一個硬傷就是,臃腫,重復代碼太多。因為上述的「標准參數」必須要靠各個腳本來實現,而且各個腳本之間的實現都差不多(根本就是從一個skeleton骨架來的)。而Systemd則進行了統一實現,也就是說在Systemdservice中完全就不需要、也看不到這部分內容。這使得Systemd服務非常簡明易讀,例如NetworkManager這一重量級程序的服務,算上注釋一共才有19行。而它相應的SysV啟動腳本頭100行連標准參數都沒實現完。Systemd兼容Sysv啟動腳本,這也是為什麼這么久我們仍然需要一個systemd-sysvinit軟體包的原因。但是根據以上理由,最好針對所有您安裝的守護精靈都使用原生Systemd服務來啟動。另外,Systemd服務可無縫用於所有使用Systemd的發行版,意思是Arch下編寫的腳本拿過來依然能夠使用。通常來說,上游應該在發布源代碼的同時發布Systemd服務,但如果沒發布,你可以對照本教學來為它們寫一個並貢獻給它們。關於SysVinit啟動腳本的編寫可見openSUSE:Packaging_init_scripts,這主要用於你的伺服器,畢竟伺服器追求穩定軟體更新的不是很勤(但你一定不知道歐盟汽車里的車載系統必須是Systemd)。真正開始前需要注意的問題如上所述,Systemd的service文件是完全跨發行版的,所以有時候沒有必要重造輪子。真正編寫你的服務前,請確認它在各大發行版中完全就不存在:我們的Systemd服務集合FedoraSystemd服務集合ArchLinuxSystemd服務集合GentooSystemd服務集合Debian中的少量Systemd服務ubuntu中的少量Systemd服務Systemd語法Systemd語法和.desktop文件的語法比較像,也比較類似Windows下的.ini文件,因此無論對於打包者還是最終用戶都是非常容易上手的。主要格式請見下面的小例子,這里需要說明三點:Systemd單元文件中的以「#」開頭的行後面的內容會被認為是注釋Systemd下的布爾值,1、yes、on、true都是開啟,0、no、off、false都是關閉。註:僅限於Systemd文件,比如:RemainOnExit=yes並不適用於該文件中嵌入的shell語句,比如:ExecStartPre=/usr/bin/test"x${NETWORKMANAGER}"=xyes這里的yes就不能替換。因為等號後面是一條嵌入的shell語句。Systemd下的時間單位默認是秒,所以要用毫秒(ms)分鍾(m)等請顯式說明。一個小例子NetworkManager的Systemdservice:[Unit]Description=NetworkManagerAfter=syslog.targetWants=remote-fs.targetnetwork.target[Service]Type=dbusBusName=org.freedesktop.NetworkManagerExecStart=/usr/sbin/NetworkManager--no-daemonEnvironmentFile=/etc/sysconfig/network/configExecStartPre=/usr/bin/test"x${NETWORKMANAGER}"=xyes#.NMcallsopenlog()#withLOG_PERRORwhenruninforeground.Butsystemdredirectsstderrto#syslogbydefault,.StandardError=null[Install]WantedBy=multi-user.targetAlso=NetworkManager-wait-online.service

B. 請教init.d的腳本寫法的問題,謝謝

在etc/init.d/中新建(復制其它文件後清空其內容)ser2net,在ser2net加入如下內容(ser2net這個是我自己的啟動文件,可改)#!bin/sh/etc/rc.common #/init.d/my-plugin START=80 start(){ ser2net #要運行的程序} 2、更改ser2net屬性,使其為可執行文件chmod777 /etc/init.d/ser2net 或在winSCP中直接修改文件屬性!!!我就是在這走了不少彎路!!! 3、在rc.d目錄下做一個鏈接,啟動時系統會按順序啟動rc.d目錄下的腳本鏈接,對應執行init.d目錄下的啟動腳本。鏈接命令如下:ln -s../init.d/ser2net /etc/rc.d/S80ser2net

C. ubuntu下/etc/init.d/下面的腳本全都無效,沒有任何回執信息,也沒有錯誤提示,而且還沒有起作用

可能是那些服務的啟動腳本放置的目錄不對,看看有沒有連接到其他的文件名,或者可以利用rpm -ql 服務名稱 查詢一下該服務所涉及的配置文件的地方