Examples of Sys V init.d script for update_daemon2.php?

Howtos, instructions and links to related software. Do not ask questions here.
bgvaughan
Bear Rating Trainee
Bear Rating Trainee
Posts: 3
Joined: 22 Mar 2013, 02:56

Examples of Sys V init.d script for update_daemon2.php?

Postby bgvaughan » 23 Apr 2013, 07:38

I'm running tt-rss on an Amazon EC2 instance, on the free tier, using Amazon's Linux distribution, which as far as I can tell is some sort of stripped-down variant of RHEL. I was having trouble setting things up so that the updater would run automatically. Ideally, I'd like a relatively robust daemon, that will restart automatically, or at least make a fuss and tell me to restart it. I was trying to set up a Sys V style init.d script for update_daemon2, using a barebones template; starting the daemon worked, but stopping didn't. In earlier efforts, I tried launching screen as user 'apache', but I couldn't seem to get that to work in a script, although entering commands interactively seemed to work.

I've seen people here mention that they're using init.d scripts. Does someone have a working example they're willing to share?

In the meantime, what I've done is to add this to the system crontab:

Code: Select all

@reboot /root/tt-rss-update.bash


Referring to this script:

Code: Select all

#!/bin/bash

cd /var/www/html
/bin/su apache -s /bin/bash -c "/usr/bin/php ./update_daemon2.php" 2>&1 >/dev/null &


It's been working okay for a few weeks, but as I said, I'd rather do something more robust.

thanosk
Bear Rating Trainee
Bear Rating Trainee
Posts: 1
Joined: 23 Apr 2013, 09:49
Location: Greece
Contact:

Re: Examples of Sys V init.d script for update_daemon2.php?

Postby thanosk » 23 Apr 2013, 09:53

Use the following as a template. Just change TT_PATH and USER to suit your particular installation

Code: Select all

#!/bin/bash
## myapp daemon
# chkconfig: 345 20 80
# description: tt-rss update daemon
# processname: tt-rss

# Source function library.
. /etc/init.d/functions


# Define some variables
TT_PATH="/path/to/tt-rss/"
         
DAEMON=/usr/bin/php
DAEMONOPTS="update.php --daemon --feeds"
         
NAME=tt-rss
DESC="tt-rss update daemon"
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
USER=ttrss-user
         
case "$1" in
start)
    printf "%-50s" "Starting $NAME..."
    cd $TT_PATH
#    PID=`daemon --user=$USER $DAEMON $DAEMONOPTS`
    PID=`daemon --user=$USER $DAEMON $DAEMONOPTS > /dev/null 2>&1 & echo $!`
    #echo "Saving PID" $PID " to " $PIDFILE
        if [ -z $PID ]; then
            printf "%s\n" "Fail"
        else
            echo $PID > $PIDFILE
            printf "%s\n" "Ok"
        fi
;;
status)
        printf "%-50s" "Checking $NAME..."
        if [ -f $PIDFILE ]; then
            PID=`cat $PIDFILE`
            if [ -z "`ps axf | grep ${PID} | grep -v grep`" ]; then
                printf "%s\n" "Process dead but pidfile exists"
            else
                echo "Running"
            fi
        else
            printf "%s\n" "Service not running"
        fi
;;
stop)
        printf "%-50s" "Stopping $NAME"
            PID=`cat $PIDFILE`
            cd $TT_PATH
        if [ -f $PIDFILE ]; then
            kill -HUP $PID
            printf "%s\n" "Ok"
            rm -f $PIDFILE
        else
            printf "%s\n" "pidfile not found"
        fi
;;
 
restart)
    $0 stop
    $0 start
;;
         
*)
        echo "Usage: $0 {status|start|stop|restart}"
        exit 1
esac

phz
Bear Rating Disaster
Bear Rating Disaster
Posts: 77
Joined: 18 Mar 2013, 18:32

Re: Examples of Sys V init.d script for update_daemon2.php?

Postby phz » 23 Apr 2013, 09:54

This is the init script included in the Debian package of TT-RSS.

Code: Select all

#! /bin/sh
### BEGIN INIT INFO
# Provides:          tt-rss
# Required-Start:    $local_fs $remote_fs
# Should-Start:      mysql postgresql
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Tiny Tiny RSS update daemon
# Description:       Update the Tiny Tiny RSS subscribed syndication feeds.
### END INIT INFO

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Tiny Tiny RSS update daemon"
NAME=tt-rss
DISABLED=0
FORKING=0

PIDFILE=/var/lib/tt-rss/update_daemon.lock
LOGFILE="/var/log/tt-rss.log"

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

DAEMON="/usr/share/tt-rss/www/update.php"
DAEMON_ARGS="--daemon"

if [ "$FORKING" != "0" ]; then
   DAEMON="/usr/share/tt-rss/www/update_daemon2.php"
   DAEMON_ARGS=""
fi

LOADER=/usr/bin/php
DAEMON_DIR="/usr/share/tt-rss/www"
SCRIPTNAME=/etc/init.d/tt-rss

# Exit if the package or loader is not installed
[ -x "$LOADER" ] || exit 0
[ -x "$DAEMON" ] || exit 0

# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

if [ "$DISABLED" != "0" -a "$1" != "stop" ]; then
   log_warning_msg "Not starting $DESC - edit /etc/default/tt-rss and change DISABLED to be 0.";
   exit 0;
fi

#
# Function that starts the daemon/service
#
do_start()
{
   if [ ! -f "$LOGFILE" ] ; then
      touch "$LOGFILE"
      chown www-data:www-data "$LOGFILE"
   fi

   # Return
   #   0 if daemon has been started
   #   1 if daemon was already running
   #   2 if daemon could not be started
   start-stop-daemon --start --background --quiet -c "www-data:www-data" --chdir "$DAEMON_DIR" --pidfile "$PIDFILE" --exec "$DAEMON" --test > /dev/null \
      || return 1

   start-stop-daemon --start --background --quiet -c "www-data:www-data" --chdir "$DAEMON_DIR" --pidfile "$PIDFILE" --exec "$DAEMON" --startas /bin/sh -- -c "$DAEMON $DAEMON_ARGS >> $LOGFILE 2>&1" \
      || return 2
   # Add code here, if necessary, that waits for the process to be ready
   # to handle requests from services started subsequently which depend
   # on this one.  As a last resort, sleep for some time.
}

#
# Function that stops the daemon/service
#
do_stop()
{
   # Return
   #   0 if daemon has been stopped
   #   1 if daemon was already stopped
   #   2 if daemon could not be stopped
   #   other if a failure occurred
   start-stop-daemon --stop --quiet --retry=TERM/1/KILL/5 --pidfile $PIDFILE
   RETVAL="$?"
   [ "$RETVAL" = 2 ] && return 2
   # Wait for children to finish too if this is a daemon that forks
   # and if the daemon is only ever run from this initscript.
   # If the above conditions are not satisfied then add some other code
   # that waits for the process to drop all resources that could be
   # needed by services started subsequently.  A last resort is to
   # sleep for some time.
   start-stop-daemon --stop --quiet --oknodo --retry=0/1/KILL/5 --exec $DAEMON
   [ "$?" = 2 ] && return 2
   # Many daemons don't delete their pidfiles when they exit.
   rm -f $PIDFILE
   return "$RETVAL"
}

case "$1" in
  start)
   log_daemon_msg "Starting $DESC" "$NAME"
   do_start
   case "$?" in
      0|1) log_end_msg 0 ;;
      2)   log_end_msg 1 ;;
   esac
   ;;
  stop)
   log_daemon_msg "Stopping $DESC" "$NAME"
   do_stop
   case "$?" in
      0|1) log_end_msg 0 ;;
      2)   log_end_msg 1 ;;
   esac
   ;;
  restart|force-reload)
   #
   # If the "reload" option is implemented then remove the
   # 'force-reload' alias
   #
   log_daemon_msg "Restarting $DESC" "$NAME"
   do_stop
   case "$?" in
     0|1)
      do_start
      case "$?" in
         0) log_end_msg 0 ;;
         1) log_end_msg 1 ;; # Old process is still running
         *) log_end_msg 1 ;; # Failed to start
      esac
      ;;
     *)
        # Failed to stop
      log_end_msg 1
      ;;
   esac
   ;;
  status)
   status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $?
   ;;
  *)
   echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload|status}" >&2
   exit 3
   ;;
esac

Change paths accordingly (and since the `DAEMON_DIR` variable isn't actually reused for the daemon paths, you need to change it three times :-) ).

bgvaughan
Bear Rating Trainee
Bear Rating Trainee
Posts: 3
Joined: 22 Mar 2013, 02:56

Re: Examples of Sys V init.d script for update_daemon2.php?

Postby bgvaughan » 23 Apr 2013, 12:38

The example from phz depended on commands not available on this system, specifically 'start-stop-daemon' (it's not in the repositories either), so I've been working with thanosk's example. I edited TT_PATH and USER, and also DAEMONOPTS, so that it referred to update_daemon2.php.

However, following a reboot, the pidfile is created but the daemon doesn't start automatically. 'service tt-rss restart' successfully starts it.

'service tt-rss stop' reports success. But the pidfile has the process ID for '/bin/bash /etc/init.d/tt-rss start'. Killing it has no effect. The child of that process is 'runuser -s /bin/bash apache -c ulimit -S -c 0 >/dev/null 2>&1 ; /usr/bin/php update_daemon2.php'. Killing that process still leaves '/usr/bin/php update_daemon2.php' running.


Return to “Knowledge Base”

Who is online

Users browsing this forum: No registered users and 1 guest