[arch-general] manage starting and stopping processes with less typing

Nathan Wayde kumyco at konnichi.com
Thu Apr 15 04:34:37 EDT 2010


On 13/04/10 20:50, Linas wrote:
> David C. Rankin wrote:
>> Guys,
>>
>> 	One thing I miss with Arch are init-script shortcuts for starting and stopping
>> processes. rc-commands really help cut down on typing. For example, all suse did
>> was to create links to the files in /etc/rc.d/... with a naming convention of
>> rc<init script name>. So, for example, instead of having to type:
>>
>>    /etc/rc.d/postfix
>>
>> the shortcut was simply
>>
>>    rcpostfix
>>
>> 	I have normally seen the sym-link shortcuts placed in /usr/sbin, but
>> /usr/local/sbin works fine as well. The convenience is addictive. If you manage
>> your box from the command line or want to, then you can give this setup a
>> testdrive. You can create the sym-links very easily with the following cut and
>> pasted to the command line (as root - all on one line):
>>
>> for i in $(ls /etc/rc.d); do [[ -e /etc/rc.d/$i ]]&&  [[ ! -h /usr/local/sbin/$i
>> ]]&&  ln -sv /etc/rc.d/$i /usr/local/sbin/rc${i}; done
>>
> No need to create one symlink per file.
> You can just add rc() { /etc/rc.d/$*; } to the user profile to
> automatically be able to do:
>
> rc postfix start  for any script you have or ever add.
>
> To have autocompletion with your new command, also add:
> complete -o filenames -W "$(cd /etc/rc.d/&&  echo *)" rc
>

here's my rc script, no need for completion IMO when you can just type: 
`rc r l~pd` to restart lighttpd

#!/bin/sh

WC='~'

if [ $# -ne 2 ]; then
     echo "usage: <OPERATION> <PATTERN>"
     echo "       OPERATION can also be one of: k(stop), r(restart), 
s(start)"
     echo "       PATTERN(grep -E ^PATTERN$) where $WC is replaced with .*"
     exit 1
fi

case $1 in
k) opr="stop"
     ;;
r) opr="restart"
     ;;
s) opr="start"
     ;;
*) opr=$1
esac
if [ "$opr" = "" ]; then
     echo "error: no operation specified."
     exit 1
fi

pat=$(echo $2 | sed "s/$WC/.*/g")
rc=$(ls /etc/rc.d/ | grep -E "^$pat$")
mat=$(echo $rc | wc -w)
if [ "$mat" = "1" ]; then
     sudo /etc/rc.d/$rc $opr
elif [ "$mat" = "0" ]; then
     echo "error: no targets found."
else
     echo "error: multiple targets found:"
     for t in $(echo $rc); do
         echo "       $t"
     done
fi






More information about the arch-general mailing list