
我希望我的伺服器(透過咆哮)通知我(重新)啟動已完成。我已經準備好發出咆哮的 php 文件,但我不知道應該在哪個文件中添加該行。
我需要在什麼文件中添加我的程式碼,以便它僅在 SuSE 啟動完成後運行?
答案1
(open)SUSE 用於/etc/init.d/after.local
此目的。只需將需要執行的命令添加到該文件中即可。請注意,這在 SystemV init 中運作得很好,但在 systemd 中,這需要 AFAIK 需要以不同的方式解決。
答案2
Suse Linux Enterprise 11 SP2(和 openSUSE ?)的更新語法
最好的方法是建立一個 shell 腳本來呼叫您的 PHP 腳本。該 shell 腳本的標頭中應包含以下註解:
#!/bin/sh
### BEGIN INIT INFO
# Provides: nothing
# Required-Start: $all
# Default-Start: 3 5
# Default-Stop: 4
# Short-Description: single_line_description
# Description: multiline_description
### END INIT INFO
您可以在 中找到典型的模板(帶有大量解釋性註釋)/etc/init.d/skeleton
。此模板包含掛鉤 PHP 腳本所需的程式碼。您將看到一個開始案例,您必須呼叫 PHP 腳本。
我在標頭中丟棄了許多可選參數,因為您似乎不需要它們。
重要的
至少使用 case 語句的框架很重要(參見初始化腳本操作),並至少實現起始案例。在開始的情況下,這是呼叫腳本的地方。
您可以在這裡找到一個小腳本範例,該範例將在引導結束時呼叫:看我的要點。我為預設停止設定了無效的運行級別,但不知何故,該腳本在關閉期間仍然被呼叫。無論如何,在關閉時執行“停止”情況下的程式碼,而不是執行“啟動”情況下的程式碼。
編寫腳本後,將其複製,/etc/init.d
假設您的 init 腳本名為 boot-notification,那麼您將執行以下操作(以 root 身分):
chown root:root boot-notification
chmod 0750 boot-notification
mv boot-notification /etc/init.d/
然後需要將腳本「註冊」到init系統中。您將使用該insserv
指令(再次以 root 身分)或可以使用 YaST:
insserv boot-notification
然後,您可以透過查看每個初始化等級來進一步檢查該腳本是否是最後執行的腳本之一。如果您只選擇運行等級 3,那麼您可以這樣做:
ls -l /etc/init.d/rc3.d/S*
這將返回初始化腳本的連結列表。腳本的連結應該位於列表的末尾(或附近)。
注意:如果您想嘗試以更動態的方式編寫初始化腳本,我建議您閱讀以下兩頁:
答案3
對於 OpenSUSE 12.2 (Mantis),腳本對於“after local”應該是/etc/init.d/after-local
,你可能需要透過systemctl啟用它,就像這樣...
到使能夠/etc/init.d/after-local,
systemctl enable after-local.service
到檢查狀態/etc/init.d/after-local,
systemctl status after-local.service
答案4
我發現有兩種方法可以做到這一點:
- 首先也是最重要的是打開終端機並輸入:
sudo crontab -e
然後輸入
@reboot sudo <command_to_execute_at_startup>
- 其次你可以建立一個服務文件使用這種方法