如在OS X系統的10.8.5版本上使用Open Directory,相信一定會遇過伺服器無緣無故當機的情況,而第一次出現當機的時候一定是毫無頭緒,摸不清到底甚麼在影響伺服器的運作。為了解決這個問題,首先可使用一些簡單的指令檢查一下伺服器資源的使用情況。
$ ps aux
或可使用crontab寫成日誌記錄特定時間內的資訊
$ crontab -e
# 將指令執行顯示的資訊寫成日誌 * * * * * ps aux>"log/$(date).log"
當下一次當機重啓伺服器後,打開當機前最後一個日誌檔,相信便可以一目了然,查看到Open Directory服務有一個名為slapd的程序使用CPU和Memory的資源都十分高,最終導致伺服器當機。
為了解決這個問題,如條件允許的話可以嘗試升級系統版本簡單解決(而本人目前未嘗試過進行升級,所以無法測試)。另外還有一個方法可暫時性解決問題,可透過排程工作定時重啓Open Directory,釋放sladp程序所佔的資源,讓伺服器不會因資源負荷過高而當機。
根據如下部驟設置排程工作。
- 進入排程工作的目錄
$ cd /Library/LaunchDaemons
- 建立自訂的排程工作
sudo touch com.yourname.restartslapd.plist
- 開啓編輯自訂的排程工作
sudo vim com.yourname.restartslapd.plist
- 為自訂的排程工作檔案鍵入如下內容
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.yourname.restartslapd</string> <key>ProgramArguments</key> <array> <string>/Users/Shared/scripts/killstartslapd.sh</string> </array> <key>Nice</key> <integer>1</integer> <key>StartCalendarInterval</key> <dict> <key>Hour</key> <integer>1</integer> </dict> <key>RunAtLoad</key> <true/> <key>StandardErrorPath</key> <string>/tmp/restartslapd.err</string> <key>StandardOutPath</key> <string>/tmp/restartslapd.out</string> </dict> </plist>
- 建立並編輯執行程序的腳本
[cod]
$ touch /Users/Shared/scripts/killstartslapd.sh
$ vim /Users/Shared/scripts/killstartslapd.sh
[/code] - 為腳本檔案鍵入如下內容
#!/bin/bash date >> /tmp/restartslapd.out echo "restarting slapd..." pkill slapd sleep 5 /usr/libexec/slapd -d 255 echo "completed!"
- 載入至launchctl使其可開機啓動
$ sudo launchctl load com.yourname.restartslapd.plist
- 透過指令查詢自訂的排程工作是否於launchctl列表中
$ sudo launchctl list
如讀者有更好的解決辦法,歡迎分享給有需要的人。
鏈結到這頁!