SMF - 윈디하나의 솔라나라
|
/etc/init.d/
에 시작 스크립트가 없다. 시작스크립트는 SMF에 의해 관리된다. 시스템 시작시 특정 스크립트에서 알 수 없는 오류가 나도 알아내기 힘들었는데, 이를 쉽게 감지하고 시작 스크립트 전체를 체계적으로 관리할 수 있게 할 목적으로 개발되었다./usr/local/apache2
의 아파치를 등록하려면 /lib/svc/method/http-apache2
파일을 적당히 수정하면 된다./etc/rc?.d/
디렉토리에 S 또는 K 로 시작하는 실행 스크립트를 넣는, 고전적인 방법도 여전히 유효하다.svcs -a
명령을 이용해 전부 알아낼 수 있다.스키마:서비스명:인스턴스명형식으로 이루어진다.
svc:/network/smtp:sendmail
라는 FMRI는 svc가 스키마가 되고, /network/smtp가 서비스명, sendmail 이 인스턴스명이다./var/svc/log
디렉토리를 확인해보자.root@wl ~ # svcs STATE STIME FMRI ... legacy_run 11월_20 lrc:/etc/rc2_d/S73cachefs_daemon online 11월_20 svc:/network/ssh:default online 11월_20 svc:/network/ftp:default online 11월_24 svc:/network/nfs/server:default online 12월_29 svc:/network/smtp:sendmail ...전체 서비스 보기
root@wl ~ # svcs -a STATE STIME FMRI ... legacy_run 11월_20 lrc:/etc/rc2_d/S73cachefs_daemon disabled 11월_20 svc:/network/http:apache2 disabled 11월_20 svc:/network/ntp4:default online 11월_20 svc:/network/ssh:default ...enabled 되었지만 실행중이지 않은 서비스 보기
root@wl ~ # svcs -x root@wl ~ # -- 그런 서비스가 없는 경우 아무것도 표시되지 않는다.특정 서비스만 보기
root@wl ~ # svcs svc:/network/smtp:sendmail STATE STIME FMRI online 12월_29 svc:/network/smtp:sendmail특정 서비스 자세히 보기
root@wl ~ # svcs -v svc:/network/smtp:sendmail STATE NSTATE STIME CTID FMRI online - 12월_29 58447 svc:/network/smtp:sendmail root@wl ~ # svcs -x svc:/network/smtp:sendmail svc:/network/smtp:sendmail (sendmail SMTP mail transfer agent) 상태: online(2009년 12월 29일 화요일 오후 05시 23분 47초 이후) 참조: sendmail(1M) 참조: /var/svc/log/network-smtp:sendmail.log 영향: 없음 root@wl ~ #특정 서비스의 모든 정보 보기
root@wl ~ # svcs -l svc:/network/smtp:sendmail fmri svc:/network/smtp:sendmail 이름 sendmail SMTP mail transfer agent 사용 참 상태 online next_state none state_time 2009년 12월 29일 화요일 오후 05시 23분 47초 logfile /var/svc/log/network-smtp:sendmail.log 재시작기 svc:/system/svc/restarter:default contract_id 58447 dependency require_all/refresh file://localhost/etc/mail/sendmail.cf (online) dependency require_all/refresh file://localhost/etc/nsswitch.conf (online) dependency optional_all/none svc:/system/filesystem/autofs (online) dependency require_all/none svc:/system/filesystem/local (online) dependency require_all/none svc:/network/service (online) dependency require_all/refresh svc:/milestone/name-services (online) dependency optional_all/refresh svc:/system/identity:domain (online) dependency optional_all/none svc:/system/system-log (online)특정 서비스가 의존하고 있는 서비스 보기
root@wl ~ # svcs -d svc:/network/smtp:sendmail STATE STIME FMRI online 11월_20 svc:/milestone/name-services:default online 11월_20 svc:/system/identity:domain online 11월_20 svc:/network/service:default online 11월_20 svc:/system/filesystem/local:default online 11월_20 svc:/system/filesystem/autofs:default online 11월_20 svc:/system/system-log:default특정 서비스에 의존하고 있는 서비스 보기
root@wl ~ # svcs -D svc:/network/smtp:sendmail STATE STIME FMRI online 11월_20 svc:/milestone/multi-user:default특정 서비스가 실행한 데몬 및 그 자식 프로세스 보기
root@wl ~ # svcs -p svc:/network/smtp:sendmail STATE STIME FMRI online 12월_29 svc:/network/smtp:sendmail 12월_29 15609 sendmail 12월_29 15612 sendmail
root@wl ~ # svcs "*ntp*" STATE STIME FMRI disabled 11월_20 svc:/network/ntp4:default online 1월_07 svc:/network/ntp:default
root@wl ~ # svcs -R svc:/system/svc/restarter:default online 11월_24 svc:/network/nfs/server:default online 12월_29 svc:/network/smtp:sendmail online 1월_07 svc:/network/ntp:default ...
/etc/rc*.d
에서 실행된 스크립트. SMF에 의해 관리되는 것이 아니다.root@wl ~ # svcadm enable sendmail root@wl ~ # svcadm disable sendmail root@wl ~ # svcadm restart sendmail root@wl ~ # svcadm -v enable sendmail svc:/network/smtp:sendmail을(를) 사용합니다. root@wl ~ # svcadm -v disable sendmail svc:/network/smtp:sendmail을(를) 사용하지 않습니다. root@wl ~ # svcadm enable -r sendmail root@wl ~ # svcadm mark maintenance sendmail
root@wl ~ # svccfg import /var/svc/manifest/application/sample.xml
root@wl ~ # svccfg export /network/smtp ... root@wl ~ # svccfg export /network/smtp > smtp.xml
root@wl ~ # svccfg delete /network/smtp:sendmail
/etc/inetd.conf
는 더이상 사용하지 않는다. 이 의미는 /usr/lib/inet/inetd
데몬은 /etc/inetd.conf
에서 설정을 가져오지 않는다는 의미다. /etc/inetd.conf
파일이 존재하긴 하지만 솔라리스 10부터는 이 파일을 inetconv(1M)을 사용해 SMF 저장소에 병합해 관리하고 있다. 쉽게 말해 /etc/inetd.conf
를 지워도 inetd 의 서비스에는 전혀 지장 없다./etc/inetd.conf
를 사용해야 할 이유는 전혀 없다. inetd 에서 서비스 하던 서비스는 모두 svcadm(1M) 을 사용해 관리하거나, inetadm(1M) 을 사용해 관리할 수 있다.root@wl ~ # inetadm ... disabled disabled svc:/network/telnet:default ... root@wl ~ # inetadm -e svc:/network/telnet:default 1) root@wl ~ # inetadm -d svc:/network/telnet:default 2) root@wl ~ # svcadm enable svc:/network/telnet:default 1) root@wl ~ # svcadm disable svc:/network/telnet:default 2)1) 활성화
root@wl ~ # inetadm -l svc:/network/telnet:default 1) SCOPE NAME=VALUE name="telnet" ... default connection_backlog=10 root@wl ~ # inetadm -m svc:/network/telnet:default connection_backlog=20 2) root@wl ~ # inetadm -m svc:/network/telnet:default connection_backlog= 3)1) 현재 프로퍼티를 확인한다.
/etc/inetd.conf
가 기본 값이 된다. 아래에 사용 예제가 있다.
inetd_echo.sh | (132 바이트) |
#!/bin/bash # # Simple Echo server for inetd. # see http://www.solanara.net/solanara/smf#head_smf_inetd_echo read r echo $r exit 0
root@wl ~ # vi /etc/services shellecho 8080/tcp root@wl ~ # vi inetd_echo.conf shellecho stream tcp nowait root /usr/local/bin/inetd_echo.sh inetd_echo.sh root@wl ~ # chmod +x /usr/local/bin/inetd_echo.sh root@wl ~ # inetconv -i inetd_echo.conf root@wl ~ # inetadm -e svc:/network/shellecho/tcp:default root@wl ~ # inetadm -l svc:/network/shellecho/tcp:default삭제하려면 아래와 같이 한다.
root@wl ~ # inetadm -d svc:/network/shellecho/tcp:default root@wl ~ # rm /var/svc/manifest/network/shellecho-tcp.xml root@wl ~ # svccfg delete svc:/network/shellecho/tcp:default
/var/svc/manifest/application/database/mysql.xml
에 복사한다.
mysql.xml | (3,084 바이트) |
<?xml version="1.0"?> <!-- WindyHana's Solanara: SMF - http://www.solanara.net/solanara/smf --> <!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1"> <service_bundle type='manifest' name='mysql'> <service name='application/database/mysql' type='service' version='1'> <!-- Wait for network interfaces to be initialized. --> <dependency name='network' grouping='require_all' restart_on='none' type='service'> <service_fmri value='svc:/milestone/network:default' /> </dependency> <!-- Wait for all local filesystems to be mounted. --> <dependency name='filesystem-local' grouping='require_all' restart_on='none' type='service'> <service_fmri value='svc:/system/filesystem/local:default' /> </dependency> <exec_method type='method' name='start' exec='/lib/svc/method/mysql start' timeout_seconds='120' /> <exec_method type='method' name='stop' exec='/lib/svc/method/mysql stop' timeout_seconds='120' /> <exec_method type='method' name='restart' exec='/lib/svc/method/mysql restart' timeout_seconds='240' /> <property_group name='general' type='framework'> <propval name='value_authorization' type='astring' value='solaris.smf.value.mysql' /> <propval name='action_authorization' type='astring' value='solaris.smf.manage.mysql' /> </property_group> <instance name='version_50' enabled='false'> <method_context> <method_credential user='mysql' group='mysql' /> </method_context> <property_group name='mysql' type='application'> <propval name='bin' type='astring' value='/usr/local/mysql/bin' /> <propval name='data' type='astring' value='/usr/local/mysql/var' /> <propval name='value_authorization' type='astring' value='solaris.smf.value.mysql' /> </property_group> </instance> <stability value='Evolving' /> <template> <common_name> <loctext xml:lang='C'> MySQL RDBMS </loctext> </common_name> <documentation> <manpage title='MySQL 5.0' section='1' /> <doc_link name='mysql.com' uri='http://www.mysql.com' /> </documentation> </template> </service> </service_bundle>
/lib/svc/method/mysql
에 넣어놓는다.
mysql | (838 바이트) |
#!/sbin/sh # # WindyHana's Solanara: SMF # http://www.solanara.net/solanara/smf # . /lib/svc/share/smf_include.sh getproparg() { val=`svcprop -p $1 $SMF_FMRI` [ -n "$val" ] && echo $val } MYSQLBIN=`getproparg mysql/bin` MYSQLDATA=`getproparg mysql/data` PIDFILE=${MYSQLDATA}/`/usr/bin/uname -n`.pid if [ -z $SMF_FMRI ]; then echo "Error: SMF framework variables are not initialized" exit $SMF_EXIT_ERR fi if [ -z $MYSQLDATA ]; then echo "Error: mysql/data property not set" exit $SMF_EXIT_ERR_CONFIG fi if [ ! -d ${MYSQLDATA}/mysql ]; then $MYSQLBIN/mysql_install_db --user=mysql --datadir=$MYSQLDATA fi case "$1" in 'start'|'stop'|'restart'|'reload'|'force-reload'|'status') $MYSQLBIN/../share/mysql/mysql.server $1 ;; *) echo "Usage: $0 {start|stop|restart|reload|force-reload|status}" exit 1 ;; esac exit $SMF_EXIT_OK
root@wl ~ # cd /var/svc/manifest/application/database root@wl ~ # svccfg validate mysql.xml root@wl ~ # svccfg import mysql.xml root@wl ~ # svcs mysql root@wl ~ # svcadm enable mysql등록된 MySQL 서비스를 삭제하려면
svcadm disable mysql; svccfg delete mysql
명령을 실행하면 된다.
RSS ATOM XHTML 5 CSS3 |
Copyright © 2004-2024 Jo HoSeok. All rights reserved. |