Sunday, June 12, 2016

Making Transmission and RSS best buddies

Ok here is the thing. I will keep coming back till I am alive.

Today, just to waste sometime, decided to find a way by which I can add rss support to transmission.

Thanks to this post, I found a way with the help of this script.

BUT there are problems with the script -

1. It will parse the rss and add the torrents to transmission's queue. But is if happen to delete the torrent, it will again add it.
2. There is no log file which it can refer to while deciding about downloading it.

Then I summon the my coding super powers to modify the script. Now my script while parsing the  RSS also refers to the log file and checks the title of the torrent. If it is there, script will not add the torrent. Rather it will display a message like below

Torrent Already Downloaded / or in queue: Torrent Name
 Here is my script. https://github.com/nigamankit7/transmission-rss

Now steps to set it up -

  1. Open SSH and connect to your cloud
  2. Install Transmission (I used this  tutorial)
  3. Go to your home dir or anywhere you like
    cd ~/
  4. Download chinese PHP script with wget:
    wget https://raw.githubusercontent.com/nigamankit7/Transmission-RSS/master/rss.php
  5. Edit the config section at the end of the file with any text editor
       nano rss.php
 Here is the list of RSS links (it can be more than one. Just delete all of them here and put yours. Remember to omit the comma after the last link.
$rss = array(
    'http://chdbits.org/torrentrss.php...',
    'http://totheglory.im/putrssmc.php...',
    'https://hdcmct.org/torrentrss.php...',
    'https://open.cd/torrentrss.php?.....',
    'https://mv.open.cd/torrentrss.php?..',
    'http://hdwing.com/rss.php?..........',
    'http://hdtime.org/torrentrss.php?...'
);
 Internal IP to your cloud (it's better to use static local IP, I'm not sure if the name would work like on your computer)
$server = 'http://127.0.0.1';
 Access port to Transmission (if you haven't change it, skip it)
$port = 9091;
 RPC path for Transmission (same here, skip it if you haven't changed it)
$rpcPath = '/transmission/rpc';
 Credentials for your Transmission (empty by default)
$user = '';
$password = '';
  1. Save and exit
  2. Test your script with
    php rss.php
 If all goes well, it should return a list of found links and added to Transmission, for example:
success add torrent: Two and a Half Men 12x09 Bouncy, Bouncy, Bouncy, Lyndsey 720p
success add torrent: The Big Bang Theory 8x12 The Space Probe Disintegration 720p
success add torrent: Forever 1x12 720p
success add torrent: The Mentalist 7x06 Green Light 720p
  1. Check your Transmission web UI if they are downloading.
  2. Now we can add the task to cron. Edit the cron with
    crontab -e
  3. You should see at least one line with Transmission daemon. We need to add another line, like
    */10 * * * * php ~/rss.php >> /var/log/rss.log 2>&1
 or the one without logs

*/10 * * * * php ~/rss.php

 This should run our script every 10 mins.

MAKE SURE CRON IS ENABLED ON RASPBERRY

EDIT - "/home/pi/.kodi/userdata/addon_data/script.raspbmc.settings/settings.xml"

SET :  sys.service.cron TO "true"

Friday, April 24, 2015

TRakt plugin for VLC on Windows

One more reason to bid adieu to XBMC.

What a wonderful plugin from Raphaël Beamonte called TraktForVLC. Only setting it up is a tad bit of work.

Steps to get it working

1. Download the repo and extract it to a folder. I kept it in Dropbox for i don't want to do all the config again.

2. Follow the instruction given with the repo- https://github.com/nigamankit7/TraktForVLC

3. Make sure you update the name of two files as below

config.ini.default –> config.ini (in default folder)

config.bat.default –> config.bat (in windows_batch folder)

4. Also update config.bat file with all the paths. Use double quotes in batch files wherever path has spaces.

5. keep the shortcut of start.bat in startup folder.

6. If you want to check if the code is working check the log folder.

-Cheers !!

TRakt plugin for VLC on Windows

What a wonderful plugin from Raphaël Beamonte called TraktForVLC. Only setting it up is a tad bit of work.

Steps to get it working

1. Download the repo and extract it to a folder. I kept it in Dropbox for i don't want to do all the config again.

2. Follow the instruction given with the repo- https://github.com/nigamankit7/TraktForVLC

3. Make sure you update the name of two files as below

config.ini.default –> config.ini (in default folder)

config.bat.default –> config.bat (in windows_batch folder)

4. Also update config.bat file with all the paths. Use double quotes in batch files wherever path has spaces.

5. keep the shortcut of start.bat in startup folder.

6. If you want to check if the code is working check the log folder.

Friday, March 6, 2015

Automatically backup your files as soon as UBD Flash or HDD is connected

One of a great tool available to sync file is SyncTool from Microsoft. You my download a copy free of cost and installation & use is self explanatory.

Now, I don’t want to open the sync tool every time manually when I connect the HDD. My objective is to take the backup as soon as the USB HDD or flash drive is connect just like time machine backup in MAC.

I wrote a powershell script which I scheduled with task scheduler while booting. This script keeps on running like a deamon and keep on checking for the USB connection. Once the correct USB is connect with predefined name, it starts the sync tool and start syncing for each partnership sequentially.

One more benefit is that this script keeps on running in background and when the backup is started and completed, a balloon notification is shown to the user along with the path to log files. You may need to change the line number as per your case.

 

clear
$scriptpath = $MyInvocation.MyCommand.Path
$dir = Split-Path $scriptpath
$TARGETDIR = $dir + "\log"


if(!(Test-Path -Path $TARGETDIR ))
{
    New-Item -ItemType directory -Path $dir -Name "log"
}
$logFile = $TARGETDIR + "\sync.log"


function baloon-notify($logpath, $title_tip, $title)
    {   write-host "logpath : " $logpath
        write-host "titl tip : "  $title_tip  
        write-host "Title : " $title
        [void] [System.Reflection.Assembly]::LoadWithPartialName(“System.Windows.Forms”)#Remove any registered events related to notifications
        Remove-Event BalloonClicked_event -ea SilentlyContinue
        Unregister-Event -SourceIdentifier BalloonClicked_event -ea silentlycontinue
        Remove-Event BalloonClosed_event -ea SilentlyContinue
        Unregister-Event -SourceIdentifier BalloonClosed_event -ea silentlycontinue
        $notification = New-Object System.Windows.Forms.NotifyIcon
        $notification.Icon = [System.Drawing.SystemIcons]::Information
        $notification.BalloonTipTitle = $title_tip
        $notification.BalloonTipIcon = “info”
        $notification.BalloonTipText = $title + $logpath
        $notification.Visible = $True
        register-objectevent $notification BalloonTipClicked BalloonClicked_event `
        -Action {Invoke-Item $logpath} | Out-Null
        $notification.ShowBalloonTip(600)
    }


 



function Run-SyncToy ($backupPlan)
{
    $Exe = "C:\Program Files\SyncToy 2.1\SyncToyCmd.exe"
    & $Exe -R #$backupPlan
}


Register-WmiEvent -Class win32_VolumeChangeEvent -SourceIdentifier volumeChange -ea silentlycontinue 
write-host (get-date -format s) " Beginning script..."
do{
    $newEvent = Wait-Event -SourceIdentifier volumeChange
    $eventType = $newEvent.SourceEventArgs.NewEvent.EventType
    $eventTypeName = switch($eventType)
    {
        1 {"Configuration changed"}
        2 {"Device arrival"}
        3 {"Device removal"}
        4 {"docking"}
    }
    write-host (get-date -format s) " Event detected = " $eventTypeName
    if ($eventType -eq 2)
    {
        $driveLetter = $newEvent.SourceEventArgs.NewEvent.DriveName
        $driveLabel = ([wmi]"Win32_LogicalDisk='$driveLetter'").VolumeName
        write-host (get-date -format s) " Drive name = " $driveLetter
        write-host (get-date -format s) " Drive label = " $driveLabel
        # Execute process if drive matches specified condition(s)
        if ($driveLetter -eq 'H:' -and $driveLabel -eq 'Ankit')
            {
            write-host (get-date -format s) " Starting task in 3 seconds..."
            start-sleep -seconds 3
            write-host (get-date -format s)" Sync Process started"
            $tip = "Auto Sync Started.Do not remove USB."
            $text = "SyncToy started syncing. Do not remove USB till next notification."
            baloon-notify $TARGETDIR $tip $text
            Run-SyncToy ("Media Sync") | out-file $logFile -Append -Force
            write-host (get-date -format s) " Sync Process Ended"
            $tip = "Auto Sync Completed"
            $text = "Path to log file ->"
            baloon-notify $logFile $tip $text
            }
    }
    Remove-Event -SourceIdentifier volumeChange
} while (1-eq1) #Loop until next event


Unregister-Event -SourceIdentifier volumeChange

 

Thursday, March 5, 2015

Updating Sickrage - PAIN

the other day I installed sickrage on my raspberry pi and today morning I found that there are 200+ commits are are not updated on my installation.

We I tried all sorts to update my installation but nothing worked out. Ultimately I decided to stay with the current version. BUT to my surprise, my sickrage installation stopped downloading any new episode.

I need to do something now. Below are the steps followed to fix the issue. (taking a backup of sickrage via its web UI is never a bad idea before starting.)



mv /home/pi/sickrage/ /home/pi/sickrage-backup

sudo git clone https://github.com/SiCKRAGETV/SickRage.git /home/pi/sickrage

sudo chown -R 777 /home/pi/sickrage

sudo chmod -R 777 /home/pi/sickrage

cp /home/pi/sickrage-backup/config.ini /home/pi/sickrage/

cp /home/pi/sickrage-backup/sickbeard.db /home/pi/sickrage/

mkdir /home/pi/sickrage/cache

cp -a /home/pi/sickrage-backup/cache/. /home/pi/sickrage/cache/

sudo service sickrage start



Followed by a system reboot the issue is resolved with all my data intact. 

Sunday, March 1, 2015

Installing sickrage on RASPBMC

sudo apt-get update
sudo apt-get upgrade -y
sudo apt-get install python-cheetah git-core -y
wget http://sourceforge.net/projects/bananapi/files/unrar_5.0.10-1_armhf.deb
sudo dpkg -i unrar_5.0.10-1_armhf.deb
sudo git clone https://github.com/SiCKRAGETV/SickRage.git /home/pi//sickrage
sudo chown -R 777 /home/pi/sickrage
sudo chmod -R 777 /home/pi/sickrage
python /home/pi/sickrage/SickBeard.py -d
sudo apt-get install upstart
sudo nano /etc/init/sickrage.conf
#author "HTPCGuides.com"
#description "Upstart Script to run SickRage as a service on Ubuntu/Debian based systems"

#Set username for the process. Should probably be what you use for logging in

start on runlevel [2345]
stop on runlevel [016]

respawn

exec su - pi -c "python /home/pi/sickrage/SickBeard.py"
sudo service sickrage start

Friday, February 27, 2015

Setup Bit-torrent Sync on RASPBMC

 Fist we need add some repositories. Since Raspbmc do not allow the addition of new repository directly and hence do the following.


sudo apt-get install software-properties-common python-software-properties
sudo apt-get update

Now we can try below command

sudo echo deb-src http://debian.yeasoft.net/btsync wheezy main contrib non-free >> /etc/apt/sources.list.d/btsync.list
sudo apt-get update
sudo apt-get install btsync

Note that if you get permission errors on the sources.list.d file, try editing the file manually with Nano:

sudo nano /etc/apt/sources.list.d/btsync.list

and paste in these lines.

deb http://debian.yeasoft.net/btsync wheezy main contrib non-free
deb-src http://debian.yeasoft.net/btsync wheezy main contrib non-free

save and close the file followed by update. 

sudo apt-get update
Sudo apt-get install btsync

Once btsync installation is started - choose the user - "pi" and group - "default"

After the installation of btsync grant read write permission on the external drive.

sudo chmod -R 777 /media/Ankit/
sudo chown pi /media/Ankit/

Open the btsync webpage with URL http://my_Pi_IP:8888/gui


Saturday, November 15, 2014

Download Newspaper on Kindle by switching on RASPBERRY PI

In my earlier post I created a cron job on raspberry pi to download the newspaper via calibre on a pre defined time. (cron job is not enabled on RASPBMC by default. You need to enable it.).

But there could be times when you dont want to keep the raspberry pi switched on all the time just to wait till morning and let the cron job download the newspaper. The alternative is to schedule the job at startup. But again there is problem that there might be instances when i am working on some other thing on Raspberry and rebooting it mutliple time in a day. In that case my kindle will be flooded with the newspaper of same day.

Solution: I created a script to be scheduled at startup which will check the current time. If the current time is between 6:30 AM - 8 AM , the newspaper will download. Otherwise no.


Make the script executable. 

chomod +x /home/pi/scripts/time.sh

The above script can be schedule on Raspberry Pi (running RASPBMC) as follows - 

1. sudo nano /etc/rc.local
2. Add below line in the last of the file- just before exit.
    
   sh /home/pi/scripts/time.sh


Now if my RASPBERRY PI is not running over night then I just switch it on in the morning and get the newspaper delivered to my kindle.

Cheerz.

Tuesday, November 11, 2014

Enabling cron job in RASPBMC

Per default running cron jobs is deactivated in Raspbmc and there are two ways to activate them.

1. In the Raspbmc GUI under Programs -> Raspbmc Settings -> System Configuration -> Service Management -> Cronjob Scheduler

2. Via SSH/FTP by modifying sys.service.cron value to “true” the settings file under /home/<your_username>/.xbmc/userdata/addon_data/script.raspbmc.settings/settings.xml – for more infos on changing settings via SSH / FTP

-Cheers 

Sunday, November 9, 2014

Get IP of Raspberry Pi as soon it starts via PushBullet

1. First of all install curl not already installed.
2. Create a shell file with below code and replace <API> and <ID>

3. make it executable
chmod +x <filename>
4. Schedule at startup. Execute below command

sudo nano /etc/rc.local
5. Add below line. 
sh /home/pi/scripts/piip.sh

Friday, November 7, 2014

Headless Calibre Server for News–RASPBMC


First of all thanks to Kovid Goyal for the wonderful software called Calibre.
One of the best features of the Calibre is to fetch news from RSS feed and send it to my Kindle in most beautiful format.

The challenge: is that I cannot keep my laptop always on so that it can send the news on the predefined time.

Solution: Using my all purpose RASPBERRY PI for the purpose.

Steps :

1. Install Calibre

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install calibre

2. Ensure that the LANG variable is set. Just because mine was not set.

export LANG=en_US.UTF-8

3. Check if it is set correctly


locale

After editing a locale file, do not forget to re-generate the locales for the changes to take effect after reboot.

The locales that can be generated are listed in the /etc/locale.gen file: their names are defined using the format [language][_TERRITORY][.CODESET][@modifier]. To generate a locale, first uncomment the corresponding line in the file (or comment to remove); when doing this, also consider the localizations that other users on the system might need. For example, for American-English uncomment en_US.UTF.8 UTF-8. When done, save the file and generate the uncommented locale(s) by executing:


# locale-gen



4. Now since we are running the headless server and calibre don’t support is by default, hence we need to use xvfb. To use this we need to first install xvfb


sudo apt-get install xvfb

5. creating email.txt file which will contain all the email to which the email will be sent and saving it to /home/pi/scripts/ (the folder which I created in my earlier posts). One email per line in file.

6. Creating a fetch_news.sh file. (Thanks to https://gist.github.com/rogeliodh/1560289). I have modified the script a little and saving it to /home/pi/scripts/ 






7. Make the script executable


chmod a+x fetch_news.sh

8. Place the latest recipe file in the same folder i.e. saving it to /home/pi/scripts/ . If you are not aware where to get the latest version go to
https://github.com/kovidgoyal/calibre/tree/master/recipes
or you may also access the same on your PC in the zip file named “builtin_recipes” on below path C:\Program Files (x86)\Calibre2\resources

9. Run the (ba)sh file to check it.


cd /scripts
sh fetch_news.sh

10. Schedule the file to run – I am setting it to 6:30 AM every morning.


crontab -e

30 6 * * * /home/pi/scripts/fetch_news.sh

press ctrl + x and y to save the file.

Tip 1: Check the date and time before setting date and time

date

if time is not correct execute below command

date +%T -s "10:13:13"

Tip 2: If you are using the same Raspberry Pi for transmission download also, then you can schedule the reduced bandwidth (for example between 60:20 - 7:00 AM as in my case) so that Calibre dont face any issue while it downloads the News RSS.

Prevent Raspberry Pi (RASPBMC) from sleeping

Observing that the raspberry pi is going down after 30 min. if no activity done on the xbmc. The problem is that i have configured sickbeard + transmission also on my raspberry pi = 24 hours downloading box.

Follow below steps to prevent raspberry from going to sleep.

sudo nano /etc/kbd/config


edit these values to:
BLANK_TIME=0
POWERDOWN_TIME=0

-Cheers 

Saturday, April 12, 2014

Configuring Apple Time Machine backup on Windows / RASPBMC

 

This part 1 of the post will deal with the configuration of the time machine backup on windows 7 machine.

Steps involved -

1. Create image file on MAC OSX 10 + i.e. Maverick

Disk Utility -> New Image -> Save As: <filename> -> Mac OS Extended (Journaled) -> Image Format -> Sparse bundle disk image

I named it as TM

2. Then unmount the sparse bundle: by right click on the desktop or command

umount <path-to-sparse-bundle>



3. Now we will go the the Windows Machine and create a folder. I created a temp folder on Windows machine C Drive.


4. Connect the folder on MAC by right click on the finder and provided the IP followed by user name and password.


5. On MAC -Once the system is connected, i navigated to the temp folder and dragged it to the favourites for easy navigation.


6. Copied the TM sparse bundle file to temp folder


7. Then resize the file created in step 1.


hdiutil resize -size 100G /Volumes/users/multimedia/temp/TM.sparsebundle



NOTE: The resizing will not affect the actual size of the file as of now. It will only tell how much file can be expanded. In other words how large backup can be taken. For me i have a estimated backup of 40 GB so i configured the file as as 100 GB.


8. Now double click on the TM sparse bundle file from temp folder so that it gets mounted.


9. Once mounted i renamed it TM which was originally mounted as New Volume


10. Now I have a new path to take the backup i.e.


/Volumes/TM


11. Configure the backup on Time Machine on this new volume via below command.


sudo tmutil setdestination /Volumes/TM

Supply the password when asked for and done. Go to the Time Machine icon on top bar and choose backup now.


When you start Time Machine, it will create a Backups directory within the sparse bundle for your backups.


12. Add the sparse bundle to login item so that it gets connected automatically next time i login backup runs smoothly.


system preferences –> Users & Groups –> on the account you will login –> login item tab –> Click on small “+” to add the TM.sparsebundle file from the temp folder under favourite folders.  


For me it is working like a breeze.


Next time we will HACK raspberry pi for this.


-Cheerz

Thursday, February 6, 2014

Place a counter on video–Adobe After Affect

After affect is there to amaze me again. I had to host a video which keep on running for a day or two in loop. Since the video was a multicast (and not video on demand), it was like a TV show, which keeps on running and anyone who logs in will watch the show from that moment and not the beginning.

I wanted to let the viewer know that amount of time left in the video so that he can wait for the next loop to start. AE comes to the rescue.

I used a wonderful script written by Dan 

Steps involved -

1. Open a new composition

2. Add the video

3. Add a text layer

4. On source text add the below code. Update line 2 as per the timer requirements. Its actually number of seconds.

image

 

 

Code ---

rate = -1;
clockStart = 300;

function padZero(n){
if (n < 10) return "0" + n else return "" + n
}
clockTime = Math.max(clockStart + rate*(time - inPoint),0);
t = Math.floor(clockTime);
min = Math.floor((t%3600)/60);
sec = Math.floor(t%60);
min + ":" + padZero(sec)

Saturday, January 4, 2014

Pushbullet notifications from uTorrent

 

These steps can be used with any torrent client on windows which support post download “run program”

Download the latest package from here - http://dan-l.net/2013/02/12/pushbullet-desktop-application/

Source code of the application is given here

Then run pushbullet.exe and activate it by supplying the API key which you may get here https://www.pushbullet.com/account

Then open the uTorrent and go to options –> Preferences-> Advanced –> Run program

under run this program browser to the application (exe file) and then append it with --

note "uTorrent Notification" "%N is downloaded on Dell Laptop"

Now you may test a download.

 

Cheers.

Saturday, December 21, 2013

How to install DELUGE on RASPBMC

 

1. Update

   1: sudo apt-get update
   2: sudo apt-get upgrade
2. Setting up Deluge for ThinClient Access

   1: sudo apt-get install deluged
   2: sudo apt-get install deluge
   3: sudo apt-get install deluge-console

3. we need to run the Deluge daemon. Enter the following commands:



   1: deluged
   2: sudo pkill deluged

4. first make a backup of the original configuration file and then open it for editing:



   1: cp ~/.config/deluge/auth ~/.config/deluge/auth.old
   2: nano ~/.config/deluge/auth

5. Once inside nano, you’ll need to add a line to the bottom of the configuration file with the following convention:



   1: user:password:level

Where in user is the username you want for Deluge, password is the password you want, and the level is 10 (the full-access/administrative level for the daemon).


6. Start up the daemon again and then the console:



   1: deluged
   2: deluge-console

7.Once you’re inside the console, we need to make a quick configuration change. Enter the following:



   1: config -s allow_remote True
   2: config allow_remote
   3: exit
8. This enables remote connections to your Deluge daemon and double checks that the config variable has been set. Now it’s time to kill the daemon and restart it one more time so that the config changes take effect:

   1: sudo pkill deluged
   2: deluged

9. Setting up Deluge for WebUI Access


Note: If you already installed the Deluge daemon in the ThinClient section of the tutorial, skip the first command here.



   1: sudo apt-get install deluged
   2: sudo apt-get install python-mako
   3: sudo apt-get install deluge-web
   4: deluge-web

10. The default port for the WebUI is 8112; if you wish to change it use the following commands:



   1: sudo pkill deluge-web
   2: nano ~/.config/deluge/web.conf

11. Configuring Deluge to Run on Startup

Put this in /etc/default/deluge-daemon and set DELUGED_USER to the user you which to run deluge as



# Configuration for /etc/init.d/deluge-daemon
 
# The init.d script will only run if this variable non-empty.
DELUGED_USER=""             # !!!CHANGE THIS!!!!
 
# Should we run at startup?
RUN_AT_STARTUP="YES"

 


12. This should be placed in /etc/init.d/deluge-daemon



#!/bin/sh
### BEGIN INIT INFO
# Provides:          deluge-daemon
# Required-Start:    $local_fs $remote_fs
# Required-Stop:     $local_fs $remote_fs
# Should-Start:      $network
# Should-Stop:       $network
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Daemonized version of deluge and webui.
# Description:       Starts the deluge daemon with the user specified in
#                    /etc/default/deluge-daemon.
### END INIT INFO
 
# Author: Adolfo R. Brandes 
# Updated by: Jean-Philippe "Orax" Roemer
 
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DESC="Deluge Daemon"
NAME1="deluged"
NAME2="deluge"
DAEMON1=/usr/bin/deluged
DAEMON1_ARGS="-d"             # Consult `man deluged` for more options
DAEMON2=/usr/bin/deluge-web
DAEMON2_ARGS=""               # Consult `man deluge-web` for more options
PIDFILE1=/var/run/$NAME1.pid
PIDFILE2=/var/run/$NAME2.pid
UMASK=022                     # Change this to 0 if running deluged as its own user
PKGNAME=deluge-daemon
SCRIPTNAME=/etc/init.d/$PKGNAME
 
# Exit if the package is not installed
[ -x "$DAEMON1" -a -x "$DAEMON2" ] || exit 0
 
# Read configuration variable file if it is present
[ -r /etc/default/$PKGNAME ] && . /etc/default/$PKGNAME
 
# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS
 
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
 
if [ -z "$RUN_AT_STARTUP" -o "$RUN_AT_STARTUP" != "YES" ]
then
   log_warning_msg "Not starting $PKGNAME, edit /etc/default/$PKGNAME to start it."
   exit 0
fi
 
if [ -z "$DELUGED_USER" ]
then
    log_warning_msg "Not starting $PKGNAME, DELUGED_USER not set in /etc/default/$PKGNAME."
    exit 0
fi
 
#
# Function to verify if a pid is alive
#
is_alive()
{
   pid=`cat $1` > /dev/null 2>&1
   kill -0 $pid > /dev/null 2>&1
   return $?
}
 
#
# Function that starts the daemon/service
#
do_start()
{
   # Return
   #   0 if daemon has been started
   #   1 if daemon was already running
   #   2 if daemon could not be started
 
   is_alive $PIDFILE1
   RETVAL1="$?"
 
   if [ $RETVAL1 != 0 ]; then
       rm -f $PIDFILE1
       start-stop-daemon --start --background --quiet --pidfile $PIDFILE1 --make-pidfile \
       --exec $DAEMON1 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON1_ARGS
       RETVAL1="$?"
   else
       is_alive $PIDFILE2
       RETVAL2="$?"
       [ "$RETVAL2" = "0" -a "$RETVAL1" = "0" ] && return 1
   fi
 
   is_alive $PIDFILE2
   RETVAL2="$?"
 
   if [ $RETVAL2 != 0 ]; then
        sleep 2
        rm -f $PIDFILE2
        start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --make-pidfile \
        --exec $DAEMON2 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON2_ARGS
        RETVAL2="$?"
   fi
   [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] || return 2
}
 
#
# 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/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE2
   RETVAL2="$?"
   start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $DELUGED_USER --pidfile $PIDFILE1
   RETVAL1="$?"
   [ "$RETVAL1" = "2" -o "$RETVAL2" = "2" ] && return 2
 
   rm -f $PIDFILE1 $PIDFILE2
 
   [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] && return 0 || return 1
}
 
case "$1" in
  start)
   [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME1"
   do_start
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  stop)
   [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME1"
   do_stop
   case "$?" in
      0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
      2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
   esac
   ;;
  restart|force-reload)
   log_daemon_msg "Restarting $DESC" "$NAME1"
   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
   ;;
  *)
   echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
   exit 3
   ;;
esac
 
:
13. Make the script executable by root

   1: sudo chmod 755 /etc/init.d/deluge-daemon

14. Run this script on start up



   1: sudo update-rc.d deluge-daemon defaults

15. Start the daemon



   1: sudo invoke-rc.d deluge-daemon start

16. Make deluge log something


Create a structure for deluge to log to:



   1: sudo mkdir -p /var/log/deluge/daemon
   2: sudo mkdir /var/log/deluge/web
17. Give the user that deluge is running as (in this case deluge) write-access to the logs

   1: sudo chmod -R 755 /var/log/deluge
   2: sudo chown -R deluge /var/log/deluge

18. Edit the init-script like so:



DAEMON1=/usr/bin/deluged
DAEMON1_ARGS="-d -L warning -l /var/log/deluge/daemon/warning.log"             # Consult `man deluged` for more options
DAEMON2=/usr/bin/deluge-web
DAEMON2_ARGS="-L warning -l /var/log/deluge/web/warning.log"
19. Restart the daemon

   1: sudo invoke-rc.d deluge-daemon restart
20. Tell logrotate to rotate the logs

sudo cat > /etc/logrotate.d/deluge << EOF 
/var/log/deluge/*/*.log {
        weekly
        missingok
        rotate 7
        compress
        notifempty
        copytruncate
        create 600
}
EOF