BSD Newsletter.com
   Front | Info | Lists | Newsfeeds | Study Guide | What is BSD?
Advertisement: The OpenBSD PF Packet Filter Book: PF for NetBSD, FreeBSD, DragonFly and OpenBSD

BSD Links
·New Links
·Advocacy
·Drivers
·Events
·Flavours
·FAQs
·Guides
·Programming
·Security
·Software
·User Groups

This is the BSDA Study Guide Book written via a wiki collaboration. This is a work in progress. You may contribute to or discuss this specific page at http://bsdwiki.reedmedia.net/wiki/Use_an_rc__40__8__41___script_to_determine_if_a_service_is_running_and_start__44___restart_or_stop_it_as_required.html.

Use an rc.d script to determine if a service is running and start, restart or stop it as required

Concept

In addition to directly sending signals to processes, realize that BSD systems provide scripts which can be used to check the status of services and to stop, start and restart them as required. Be aware of the locations of these scripts on each of the BSD systems. Note: this objective does not apply to OpenBSD.

Introduction

In NetBSD, FreeBSD, and DragonFly, the traditional system startup script /etc/rc has been split into tiny scripts that start and stop individual services (similar to what SysVR4 systems have done for some time). Each script runs at system boot, and determines via variables set in the file /etc/rc.conf whether its service should be started or not. A similar operation is performed at system shutdown to turn off running services.

Note: OpenBSD does not use this rc.d script system. On OpenBSD, checking services and starting, stopping, and restarting services is done manually (except at boot time or shutdown). See section Configure a service to start at boot time for information and examples for configuring services on OpenBSD to start at boot time.

The advantage this approach has to the system administrator that he doesn't need to know any details about how to start or stop a system - running the corresponding rc.d script with an argument of either 'start' or 'stop' is sufficient. As an extension over the System V behaviour, an argument of 'status' displays the service's status, and 'restart' stops and then starts the service again.

A list of scripts (and thus services) that can be run can be found in the /etc/rc.d directory (hence the scripts are often called "rc.d scripts").

Examples

Here is a list of rc.d scripts from a NetBSD 4.0 system:

netbsd% ls /etc/rc.d
    DAEMON          downinterfaces  lpd             postfix         sshd
    LOGIN           fixsb           mixerctl        powerd          staticroute
    NETWORKING      fsck            mopd            ppp             swap1
    SERVERS         ftpd            motd            pwcheck         swap2
    accounting      hostapd         mountall        quota           sysctl
    altqd           identd          mountcritlocal  racoon          sysdb
    amd             ifwatchd        mountcritremote raidframe       syslogd
    apache          inetd           mountd          raidframeparity timed
    apmd            ipfilter        moused          rarpd           tpctl
    bootconf.sh     ipfs            mrouted         rbootd          ttys
    bootparams      ipmon           named           root            veriexec
    btconfig        ipnat           ndbootd         route6d         virecover
    btcontrol       ipsec           network         routed          wdogctl
    bthcid          irdaattach      newsyslog       rpcbind         wscons
    ccd             iscsi_target    nfsd            rtadvd          wsmoused
    cgd             isdnd           nfslocking      rtclocaltime    xdm
    cleartmp        kdc             ntpd            rtsold          xfs
    cron            ldconfig        ntpdate         rwho            ypbind
    dhclient        lkm1            pf              savecore        yppasswdd
    dhcpd           lkm2            pf_boot         screenblank     ypserv
    dhcrelay        lkm3            pflogd          sdpd
    dmesg           local           poffd           securelevel

TODO: I think these lists are too long for this book. Maybe just highlight some similar ones and mentin a few unique ones.

Here is the same listing on FreeBSD 6.2:

freebsd% ls /etc/rc.d
    DAEMON          devfs           kadmind         nfsd            rpcbind
    LOGIN           dhclient        kerberos        nfslocking      rtadvd
    NETWORKING      dmesg           keyserv         nfsserver       rwho
    SERVERS         dumpon          kldxref         nisdomain       savecore
    abi             early.sh        kpasswdd        nsswitch        sdpd
    accounting      encswap         ldconfig        ntpd            securelevel
    addswap         fsck            local           ntpdate         sendmail
    adjkerntz       ftpd            localpkg        othermta        serial
    amd             gbde            lpd             pccard          sppp
    apm             geli            mdconfig        pcvt            sshd
    apmd            geli2           mdconfig2       pf              swap1
    archdep         hcsecd          mixer           pflog           syscons
    atm1            hostapd         motd            pfsync          sysctl
    atm2            hostname        mountcritlocal  power_profile   syslogd
    atm3            ike             mountcritremote powerd          timed
    auditd          inetd           mountd          ppp             tmp
    auto_linklocal  initrandom      mountlate       pppoed          ugidfw
    bgfsck          ip6addrctl      moused          pwcheck         usbd
    bluetooth       ip6fw           mroute6d        quota           var
    bootparams      ipfilter        mrouted         ramdisk         virecover
    bridge          ipfs            msgs            ramdisk-own     watchdogd
    bsnmpd          ipfw            named           random          wpa_supplicant
    bthidd          ipmon           natd            rarpd           ypbind
    ccd             ipnat           netif           resolv          yppasswdd
    cleanvar        ipsec           netoptions      root            ypserv
    cleartmp        ipxrouted       network_ipv6    route6d         ypset
    cron            isdnd           newsyslog       routed          ypupdated
    devd            jail            nfsclient       routing         ypxfrd

To determine the status of a service, run the rc.d script with 'status':

TODO: maybe for examples use services or rc.d scripts that are common to these three BSDs.

netbsd# sh /etc/rc.d/ipfilter status
    ipf: IP Filter: v4.1.13 (396)
    Kernel: IP Filter: v4.1.13 
Running: yes Log Flags: 0 = none set Default: pass all, Logging: available Active list: 0 Feature mask: 0x10e

Note that the 'status' command is not available for all scripts:

netbsd# sh /etc/rc.d/postfix status
    /etc/rc.d/postfix: unknown directive 'status'.
    Usage: /etc/rc.d/postfix fast|force|one

To stop a service, run its rc.d script with the 'stop' argument:

# pgrep -lf postfix
    166 /usr/libexec/postfix/master
# sh /etc/rc.d/postfix stop
    postfix/postfix-script: stopping the Postfix mail system
# pgrep -lf postfix
    #

To start it (again), use the same script with the 'start' argument:

# sh /etc/rc.d/postfix start
    postfix/postfix-script: starting the Postfix mail system
# pgrep -lf postfix
    12101 /usr/libexec/postfix/master
    #

Now let's do this again in one command:

# pgrep -lf postfix
    12101 /usr/libexec/postfix/master
# sh /etc/rc.d/postfix restart
    postfix/postfix-script: stopping the Postfix mail system
    postfix/postfix-script: starting the Postfix mail system
# pgrep -lf postfix
    472 /usr/libexec/postfix/master
    #

Practice Exercises

  • Determine if your system has rc.d scripts by looking into /etc/rc.d
  • Determine what scripts your system has
  • Check if the cron daemon runs
  • Assuming the cron daemon does run, stop it using the corresponding rc.d script
  • Restart the cron daemon, and verify with a tool of your choice.

More information

rc(8), rc.conf(5), rc.subr(8)



Front | Information | Lists | Newsfeeds