最近,我在搞一套NMS,其中用到Ntop,希望server每次啟動時能自動加載Ntop,於是,按照以前RHEL中的習慣,在/etc/rc.local文件中加入
“ntop -i wlan0 -d -L -u ntop &> /dev/null",可是重啟後,發現Ntop根本未執行!
如下所示:
qijie@sunshine:~$ ps aux |grep ntop
qijie 2124 0.0 0.0 4012 752 pts/0 S+ 14:51 0:00 grep --color=auto ntop
於是,開始google又百度,遇到同樣問題的還不少,皆說是須將命令行寫在exit 0前,也有說須將rc.local開頭的“#!/bin/sh -e”中的
-e去掉(
據說可以忽略腳本執行的錯誤,否則腳本就會停止執行),然皆無效!
在N+1次百度後,終於找到屬於Ubuntu的原因和解決方法。
從下面可看出,Ubuntu的默認Shell是dash,而不是Bash!
root@sunshine:/home/qijie# ls -al /bin/sh
lrwxrwxrwx 1 root root 4 2010-10-03 23:42 /bin/sh -> dash
Ubuntu的wiki 裡面有官方的解釋,主要原因是dash更小,運行更快,且與POSIX兼容!
但目前存在的問題是,由於shell的更換,致使很多腳本出錯,畢竟現在的很多腳本不是100%POSIX兼容。
解決方法就是將其默認的Shell更改為Bash:
方法一: 在終端執行 sudo dpkg-reconfigure dash,然後選擇 no (recommend);
方法二:重新進行軟鏈接
sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh
我在采用方法一後,Ntop能自動加載了。
如下所示:
root@sunshine:/home/qijie# ps aux |grep ntop
ntop 2493 0.5 1.5 127536 31580 ? Ssl 14:52 0:02 ntop -i wlan0 -d -L -u ntop
root 2738 0.0 0.0 4012 752 pts/0 S+ 14:59 0:00 grep --color=auto ntop
問題得到圓滿解決!