Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 4 Sep 2008 20:51:16 +0100
From:      "David Collins" <davidcollins001@gmail.com>
To:        freebsd-questions@freebsd.org
Subject:   Re: Automatically starting user programs on boot
Message-ID:  <1b30fd140809041251h642ef61at6bcd86bd71d1158a@mail.gmail.com>

next in thread | raw e-mail | index | archive | help
|> Date: Thu, 4 Sep 2008 13:06:54 +0200 (CEST)
|> From: Sa?a Stupar <sasa@stupar.homelinux.net>
|> Subject: Automatically starting user programs on boot
|> To: freebsd-questions@freebsd.org
|> Message-ID:
|>        <3bd584700067958b3d0e6b681c98a709.squirrel@posta.homelinux.net>
|> Content-Type: text/plain;charset=iso-8859-2
|>
|> Hi!
|>
|> On my FBSD 7 server I also use screen with rtorrent. In case of server
|> reboot (power outage, server goes on UPS then power down) the user need
|> manually to login, then start screen and then rtorrent. Is it possible to
|> start this procedure automatically and of course as certain user and not
|> as root?
|> I was thinking about .startup file or something in users home directory.
|>
|> Regards,
|> Sasa

Hi,

I have been using rtorrent and screen for a while now, it is a great
setup. Anyway, I found an rc.d file for debian that I have changed to
make work for me on freebsd 7. I doubt it is as good as it could be,
but hey, it works fine for me :)

You will have to change some of the variables at the top of the file.
It opens screen on boot, names it rtorrent and starts rtorrent, does
its thing in the background. To connect to it type screen -r rtorrent

I placed it in /usr/local/etc/rc.d since it isn't part of the base
distribution. I also named it with a .sh suffix, I forget why but it
is something to do with a controlling terminal, I think. I also have a
nice .screenrc file if you would like since I know how much of a pain
it is to figure out!

$ cat /usr/local/etc/rc.d
#!/bin/sh

# PROVIDE: rtorrent
# REQUIRE: DAEMON

#############
###<Notes>###
#############
# This script depends on screen.
# For the stop function to work, you must set an
# explicit session directory using ABSOLUTE paths (no, ~ is not
absolute) in your rtorrent.rc.
# If you typically just start rtorrent with just "rtorrent" on the
# command line, all you need to change is the "user" option.
# Attach to the screen session as your user with
# "screen -dr rtorrent". Change "rtorrent" with srnname option.
# Licensed under the GPLv2 by lostnihilist: lostnihilist _at_ gmail _dot_ com
##############
###</Notes>###
##############

#######################
##Start Configuration##
#######################
# You can specify your configuration in a different file
# (so that it is saved with upgrades, saved in your home directory,
# or whateve reason you want to)
# by commenting out/deleting the configuration lines and placing them
# in a text file (say /home/user/.rtorrent.init.conf) exactly as you would
# have written them here (you can leave the comments if you desire
# and then uncommenting the following line correcting the path/filename
# for the one you used. note the space after the ".".
# . /etc/rtorrent.init.conf

# system user to run as
user="davidcollins"

# the system group to run as, not implemented, see d_start for
beginning implementation
# group=`id -ng "$user"`

# the full path to the filename where you store your rtorrent configuration
config="`su $user -c 'echo $HOME'`/.rtorrent.rc"

# set of options to run with
options=""

# default directory for screen, needs to be an absolute path
base="`su $user -c 'echo $HOME'`"

# name of screen session
srnname="rtorrent"

# file to log to (makes for easier debugging if something goes wrong)
logfile="/var/log/rtorrentInit.log"
#######################
###END CONFIGURATION###
#######################

. /etc/rc.subr

PATH=/usr/bin:/usr/local/bin:/usr/local/sbin:/sbin:/bin:/usr/sbin
name=rtorrent

rcvar=`set_rcvar`
eval "${rcvar}=\${${rcvar}:-'NO'}"

start_precmd=checkcnfg
start_cmd="${name}_start"
stop_cmd="${name}_stop"

checkcnfg() {
    exists=0
    for i in `echo "$PATH" | tr ':' '\n'` ; do
        if [ -f $i/$name ] ; then
            exists=1
            break
        fi
    done
    if [ $exists -eq 0 ] ; then
        err 3 "cannot find rtorrent binary in PATH $PATH"
    fi
    if ! [ -r "${config}" ] ; then
        err 3 "cannot find readable config ${config}. check that it is
there and permissions are appropriate"
    fi
    session=`getsession "$config"`
    if ! [ -d "${session}" ] ; then
        err 3 "cannot find readable session directory ${session} from
config ${config}. check permissions"
    fi
}

rtorrent_start()
{
	echo "Starting $name."
	[ -d "${base}" ] && cd "${base}"
	stty stop undef && stty start undef
	## start screen with rtorrent inside
	su ${user} -c "screen -dm -S "${srnname}" ${name} ${options} 2>&1
1>/dev/null" | tee -a "$logfile" >&2
}

rtorrent_stop()
{
    echo "Stopping $name."
	session=`getsession "$config"`
    if ! [ -s ${session}/rtorrent.lock ] ; then
        return
    fi
    pid=`cat ${session}/rtorrent.lock | awk -F: '{print($2)}' | sed
"s/[^0-9]//g"`
	## make sure the pid doesn't belong to another process
    if ps -A | grep -sq ${pid}.*rtorrent ; then
        kill -s INT ${pid}
    fi
}

getsession()
{
    session=`cat "$1" | grep "^[[:space:]]*session[[:space:]]*=" | sed
"s/^[[:space:]]*session[[:space:]]*=[[:space:]]*//" `
    echo $session
}

load_rc_config $name
run_rc_command "$1"



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1b30fd140809041251h642ef61at6bcd86bd71d1158a>