在传统的FreeBSD中,如果要添加一个启动项目,必须手工编辑/etc/rc.conf,这对于单机来说算不上什么,但是如果有大量的机器需要添加,逐个机器编辑,那么就太麻烦了。可以写shell或其他程序,但是也比较麻烦,因为需要配合sed/awk等工具才可以。
那么有没有可以在命令行中,或者在其他程序中可以方便调用的启动项目编译工具呢?
自从FreeBSD9.2开始,提供了一个新的工具:sysrc。
这个工具的目的就是安全地编辑/etc/rc.conf,可以方便地在命令行进行添加或修改启动项目。
例一、查看当前的启动配置项目:
root@test: # sysrc -a
defaultrouter: 192.168.1.1
dumpdev: NO
firewall_enable: yes
firewall_script: /etc/ipfw.sh
fsck_y_enable: yes
gateway_enable: yes
gerbil_enable: yes
hostname: db2
ifconfig_igb0: inet 192.168.1.22 netmask 255.255.255.0
powerd_enable: YES
sendmail_enable: NONE
sendmail_msp_queue_enable: NO
sendmail_outbound_enable: NO
sendmail_submit_enable: NO
sshd_enable: YES
syslogd_enable: yes
syslogd_flags: -s -s
这是我比较常用的配置,这个命令显示当前配置与默认配置(/etc/default/rc.conf)中不一致的项目。
例二、查看可以配置的启动项,并显示当前的值
root@test: # sysrc -A grep zfs
zfs_enable: NO
root@test: # sysrc -A grep sendmail
mta_start_script: /etc/rc.sendmail
sendmail_cert_create: YES
sendmail_enable: NONE
sendmail_flags: -L sm-mta -bd -q30m
sendmail_msp_queue_enable: NO
sendmail_msp_queue_flags: -L sm-msp-queue -Ac -q30m
sendmail_outbound_enable: NO
sendmail_outbound_flags: -L sm-queue -q30m
sendmail_pidfile: /var/run/sendmail.pid
sendmail_procname: /usr/sbin/sendmail
sendmail_rebuild_aliases: NO
sendmail_submit_enable: NO
sendmail_submit_flags: -L sm-mta -bd -q30m -ODaemonPortOptions=Addr=localhost
Sendmail的配置项目很多,也经常忘记具体的拼写,有了这个提示,就可以复制粘贴了。
例三、查看某个项目的说明:
root@test: # sysrc -d sendmail_rebuild_aliases
DEBUG: f_debug_init: debug=[1] debugFile=[]
DEBUG: UNAME_S=[FreeBSD] UNAME_P=[amd64] UNAME_R=[10.0-RELEASE]
DEBUG: common.subr: Successfully loaded.
DEBUG: f_include: file=[/usr/share/bsdconfig/sysrc.subr]
DEBUG: sysrc.subr: loading includes...
DEBUG: f_include_lang: file=[/usr/libexec/bsdconfig/include/messages.subr] lang=[]
DEBUG: sysrc.subr: Successfully loaded.
sendmail_rebuild_aliases: Run newaliases if necessary (YES/NO).
从DEBUG信息可以看到,sysrc本身需要加载很多文件。
例四、启用鼠标(moused)服务:
root@test: # sysrc moused_enable=yes
moused_enable: NO -> yes
验证一下:
root@test: # tail -n 1 /etc/rc.conf
moused_enable="yes"
例五、再禁用鼠标服务:
root@test: # sysrc moused_enable=no
moused_enable: yes -> no
再来验证一下:
root@test: # tail -n 1 /etc/rc.conf
moused_enable="no"
例六:查看现在的配置
root@test: # sysrc sshd_enable
sshd_enable: YES
root@test: # sysrc nginx_enable
sysrc: unknown variable 'nginx_enable'
请注意第二个nginx的项目,等下还要用到
例七:添加一个启动项目
root@test: # sysrc nginx_enable=yes
nginx_enable: -> yes
注意输出,显示空->yes,这表明以前没有,并且不在默认的配置(/etc/default/rc.conf)里面。
这个命令还有一个小bug:它不会解决你的手误:
root@test: # sysrc ngnix_enable=yes
ngnix_enable: -> yes
验证一下,注意两句的区别:
root@test: # tail -n 2 /etc/rc.conf
nginx_enable="yes"
ngnix_enable="yes"
同样,它不会验证值是否正确:
root@test: # sysrc ngnix_enable=yse
ngnix_enable: yes -> yse
所以运行命令的时候一定要小心。
最后,再提示一下:这个命令仅仅是添加/编辑启动项目,它不会“立即”启动项目,比如你添加了nginx_enable=”yes”,它不会马上把nginx服务启动,它仅仅是添加到系统启动中,下次启动的时候可以启动。
顺便提一句,如果马上启动nginx,可以用service命令:
service nginx start