在linux想要運行啟動一個服務有兩種方法:
1,運行/etc/init.d/目錄下的shell腳本,還可以有快捷方式,service *** start/ stop/restart /status,
2,直接運行/usr/bin目錄下的服務文件;
第一種方法啟動的程序可以通過service命令來管理,比如說查看狀態 service --status-all
查看/etc/init.d目錄,發現下面都是shell腳本,腳本里面運行的程序最終還是指向了/usr/bin下面的程序,只不過在shell腳本中可能直接對程序的一些運行參數繼續進行了設置;
第二種方法,直接運行/usr/bin/****,如果運行時有配置文件的話,需要加上 --config *****,用這種方法啟動程序后,不能用service命令查看狀態;
舉例:/etc/init.d/openstack-nova-api
suffix=api prog=openstack-nova-$suffix exec="/usr/bin/nova-$suffix" config="/etc/nova/nova.conf" pidfile="/var/run/nova/nova-$suffix.pid" logfile="/var/log/nova/$suffix.log" [ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog lockfile=/var/lock/subsys/$prog start() { [ -x $exec ] || exit 5 [ -f $config ] || exit 6 echo -n $"Starting $prog: " daemon --user nova --pidfile $pidfile "$exec --config-file $config --logfile $logfile &>/dev/null & echo \$! > $pidfile" retval=$? echo [ $retval -eq 0 ] && touch $lockfile return $retval } stop() { echo -n $"Stopping $prog: " killproc -p $pidfile $prog retval=$? echo [ $retval -eq 0 ] && rm -f $lockfile return $retval } restart() { stop start } reload() { restart } force_reload() { restart
然后用 ps aux |grep /usr/bin/nova-api來查看一下當前進程:
/usr/bin/python /usr/bin/nova-api --config-file /etc/nova/nova.conf --logfile /var/log/nova/api.log,
因此二者的等價關系為:
service openstack-nova-api start ==== /usr/bin/python /usr/bin/nova-api --config-file /etc/nova/nova.conf --logfile /var/log/nova/api.log,
最近在玩Liunx,發現linux啟動服務是用SERVICE + COMMAND,覺得很有意思,因為command命令本身也是一個腳本啊,比如說:service network restart;好奇心就來了,怎么能夠做一個屬於自己的service命令呢。
其實很簡單,只要我們認識service這個命令的原理就行了。如果要知道service這個命令怎么用,你就自己man service下,在這里,我簡要說下service的運行過程。舉個例子來說:service network restart。
首先呢,sevice 會去尋找/etc/init.d下的network腳本,restart是network腳本里的一個參數(你可以去查看network這個腳本支持的參數),然后告訴系統運行network這個腳本,剩下的事情就交給network腳本去坐了,事實就是這么簡單。
現在,你應該知道怎么編寫屬於自己的service命令了吧,編寫一個腳本,然后把它放在/etc/init.d這個目錄底下,你就可以用service +腳本名字 運行它。如果是要開機自動啟動那就得用chkconfig命令了。
注意:
A、service這個命令往往是即時生效,不用開關機,但是重啟后服務會回到默認狀態。
B、chkconfig是用於把服務加到開機自動啟動列表里,只要啟動它,就能自動啟動,重啟后永久生效
即:chkconfig --add COMMAND
chkconfig COMMAND on/off 重啟后永久生效