--- title: "Flexget init script" date: 2015-05-25T00:00:00+01:00 draft: false share: false --- I've been using [Flexget](http://flexget.com/) for the past two years or so as a download automator. Since I wrote an [init script](http://flexget.com/wiki/Daemon/Startup#InsservscriptDebiancompatible) for it a while back, and it is compatible with Debian Jessie / systemd, I figured I'd share it here. ## The script All of the following should be done as the root user. First, create a /etc/default/flexget file with the following content : ```bash # Configuration file for /etc/init.d/flexget # User to run flexget as. # Daemon will not start if left empty. FGUSER="" # Full path to the flexget config.yml file to use. # Defaults to FGUSER $HOME/.flexget/config.yml CONFIG="" # Path to the directory where flexget should log. Do not add trailing slash. # Defaults to the FGUSER $HOME/.flexget directory LOG="" # Log verbosity # Available options : none critical error warning info verbose debug trace # Defaults to info LEVEL="" ``` Please note that the FGUSER variable needs to be defined for the daemon to start. It can be set to your current user, or you can run flexget as its own user. You can create a flexget user with the following command : ```bash useradd -m -d /var/lib/flexget -r -s /bin/false flexget ``` Then, create the /etc/init.d/flexget file : ```bash #!/bin/bash ### BEGIN INIT INFO # Provides: flexget # Required-Start: $network $remote_fs # Required-Stop: $network $remote_fs # Should-Start: # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Flexget # Description: FlexGet is a multipurpose automation tool # for content like torrents, nzbs, podcasts, # comics, series, movies, etc. ### END INIT INFO # Author: Antoine Joubert, 19/01/2014 NAME="flexget" DAEMON="/usr/local/bin/flexget" SETTINGS="/etc/default/$NAME" DESC="Flexget" PIDFILE="/var/run/$NAME.pid" set -e . /lib/lsb/init-functions unset FGUSER CONFIG LOG LEVEL # Exit if flexget not installed if [ ! -x "$DAEMON" ]; then log_action_msg "$DESC: Could not find flexget executable. Exiting." exit 2 fi # Read configuration variables if [ -r /etc/default/$NAME ]; then . /etc/default/$NAME else log_action_msg "$DESC: /etc/default/$NAME not found. Exiting." exit 2 fi # Exit if FGUSER has not been set in /etc/default/flexget if [ -z $FGUSER ]; then log_action_msg "$DESC: FGUSER not set in /etc/default/$NAME. Exiting." exit 2 fi # Function to verify if flexget is already running run_check() { if [ -e $PIDFILE ]; then status_of_proc -p $PIDFILE $DAEMON $NAME > /dev/null && RETVAL=0 || RETVAL="$?" else RETVAL="2" fi } end_log() { if [ $RETVAL -eq 0 ]; then log_end_msg 0 return 0 else log_end_msg 1 exit 1 fi } # Function to define config file, log file and log level conf_check() { if [ -z $CONFIG ]; then OPTIONS="$OPTIONS" else OPTIONS="-c $CONFIG" fi if [ -z $LOG ]; then OPTIONS="$OPTIONS" else OPTIONS="$OPTIONS -l $LOG/flexget.log" if [ ! -d $LOG ]; then mkdir -p -m 750 $LOG chown $FGUSER $LOG fi fi if [ -z $LEVEL ]; then OPTIONS="$OPTIONS" else OPTIONS="$OPTIONS -L $LEVEL" fi } start_flexget() { run_check if [ $RETVAL = 0 ]; then log_action_msg "$DESC: Already running with PID $(cat $PIDFILE). Aborting." exit 2 else conf_check log_daemon_msg "$DESC: Starting the daemon." start-stop-daemon --start --background --quiet --pidfile $PIDFILE --make-pidfile \ --chuid $FGUSER --user $FGUSER --exec $DAEMON -- $OPTIONS daemon start RETVAL=$? end_log fi } stop_flexget() { run_check if [ $RETVAL = 0 ]; then log_daemon_msg "$DESC: Stopping the daemon." start-stop-daemon --stop --quiet --chuid "$FGUSER" --pidfile "$PIDFILE" --retry 30 RETVAL=$? [ -e "$PIDFILE" ] && rm -f "$PIDFILE" end_log else log_action_msg "$DESC: Not currently running. Aborting." exit 2 fi } status_flexget() { run_check if [ $RETVAL = 0 ]; then log_action_msg "$DESC: Currently running with PID $(cat $PIDFILE)." else log_action_msg "$DESC: Not currently running." fi exit $RETVAL } case "$1" in start) start_flexget ;; stop) stop_flexget ;; restart) stop_flexget && sleep 2 && start_flexget ;; status) status_flexget ;; *) echo "Usage: $0 {start|stop|restart|status}" ;; esac exit 0 ``` Then, give execution rights to the script : ```bash chmod +x /etc/init.d/flexget ``` And then, generate the necessary symlinks for the service to start on boot : *Debian Jessie* ```bash systemctl enable flexget ``` *Debian Wheezy* ```bash insserv flexget ``` To start, stop or check if the daemon is running : *Debian Jessie* ```bash systemctl start flexget systemctl stop flexget systemctl status flexget ``` *Debian Wheezy / Jessie* ```bash service flexget start service flexget stop service flexget status ``` *Debian Wheezy* ```bash /etc/init.d/flexget start /etc/init.d/flexget stop /etc/init.d/flexget status ``` ## Conclusion That's all ! If you are using this script, please let me know in the comment section below !