I am converting the init script (see below) for Linux DECnet (http://sourceforge.net/projects/linux-decnet). This is my first exposure to systemd. Naturally, my first try failed. So, now I am taking baby steps.
The Linux DECnet init script can start either or both the dnetd or phoned daemons. (I do not use the phoned daemon.) I think the best thing to do with smartd is make them separate service units. I will create /etc/systemd/system/dnetd.service and .../phoned.service. Prior to starting the daemons, the init script verifies the /etc/decnet.conf configuration file exists. I will use the [Unit] option ConditionFileNotEmpty=/etc/decnet.conf to replicate that behavior. Then it looks for evidence that the decnet kernel module is loaded by testing for the file /proc/net/decnet. If necessary, it loads the decnet kernel module and checks again for /proc/net/decnet. I have already built the decnet kernel module and I can load it with modprobe. I do not wish to force an unconditional load of the decnet kernel module using /etc/modules-load.d/decnet.conf; I prefer the services that need it (dnetd and phoned) trigger the load. However, I find no mention of the standard systemd "load a kernel module" practice. I.e., there is no "systemd.module" unit. What is the recommended method in the systemd framework to trigger a unit that loads a kernel module? If the modprobe command fails, I presume that will cause the systemd start command to fail. I would also like the systemd start command to fail if /proc/net/decnet is not created (a sign that the module has not initialized itself correctly). Is there a syntax in a systemd unit for that as well? Thank you in advance for your advice. Larry Baker US Geological Survey 650-329-5608 [email protected] #!/bin/sh # # decnet.sh # # Starts/Stops DECnet processes # # chkconfig: - 09 91 # description: DECnet. # processname: dnetd # config: /etc/decnet.conf # # # This script should go in # /etc/init.d for redhat 7.0 onwards # /etc/rc.d/init.d for redhat up to 6.2 # # You can install it using the following command: # # chkconfig --level 345 decnet on # # ----------------------------------------------------------------------------- # # Daemons to start. You may remove the ones you don't want # #daemons="dnetd phoned" daemons="dnetd" # Prefix for where the progs are installed. "make install" puts them # in /usr/local, the RPM has them in /usr prefix=/usr/local # # Interfaces to set the MAC address of. By default only the default interface # in /etc/decnet.conf will be set. If you want to set up more interfaces # for DECnet than add them here. # extra_interfaces="" # # Set up some variables. # . /etc/rc.d/init.d/functions startcmd="daemon" stopcmd="killproc" startendecho="" stopendecho="done." case $1 in start) if [ ! -f /etc/decnet.conf ] then echo $"DECnet not started as it is not configured." exit 1 fi # If there is no DECnet in the kernel then try to load it. if [ ! -f /proc/net/decnet ] then modprobe decnet if [ ! -f /proc/net/decnet ] then echo $"DECnet not started as it is not in the kernel." exit 1 fi fi echo -n $"Starting DECnet: " NODE=`grep executor /etc/decnet.conf| awk '{print $2}'` echo "$NODE" > /proc/sys/net/decnet/node_address CCT=`grep executor /etc/decnet.conf | awk '{print $6}'` echo "$CCT" > /proc/sys/net/decnet/default_device $prefix/sbin/setether $NODE $CCT $extra_interfaces for i in $CCT $extra_interfaces do ip link set dev $i allmulticast on done for i in $daemons do $startcmd $prefix/sbin/$i echo -n $" `eval echo $startecho`" done echo $"$startendecho" ;; stop) echo -n $"Stopping DECnet... " for i in $daemons do $stopcmd $prefix/sbin/$i done echo $"$stopendecho" ;; restart|reload|force-reload) echo -n $"Restarting DECnet: " for i in $daemons do $stopcmd $prefix/sbin/$i $startcmd $prefix/sbin/$i echo -n $"$startecho" done echo $"$stopendecho" ;; *) echo $"Usage $0 {start|stop|restart|force-reload}" ;; esac exit 0
_______________________________________________ systemd-devel mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/systemd-devel
