Page 1 of 2

Script

Posted: Mon 28 Nov 2011, 15:26
by Martin
Om någon Linux-kunnig person har möjlighet att hjälpa till med att skapa någon form av skript för att fixa automatisk uppstart osv av Switch King på Linux så vore det fantastiskt trevligt :wave:

Re: Script

Posted: Mon 28 Nov 2011, 19:01
by nilzen
Jag kör med scriptet, den startar upp deamon:en dock så verkar den aldrig "köra klart", vet inte om det är ett problem med scriptet eller deamon-implementationen i SK. Någon annan som kan sprida lite ljus i frågan?

Code: Select all

#!/bin/sh

### BEGIN INIT INFO
# Provides:             switchking
# Required-Start:       $network $syslog
# Required-Stop:        $network $syslog
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description:    Start and stop Switch King
# Description:          Switch King init script. This script starts and stops Switch King daemon.
### END INIT INFO

set -e
export MONO_LOG_LEVEL=info
export MONO_LOG_MASK="dll,config"

# Must be a valid filename
NAME=switchking
PIDFILE=/var/run/$NAME.pid
#This is the command to be run, give the full pathname
DAEMON=/usr/bin/mono
DAEMON_OPTS="/usr/local/switchking/bin/SwitchKing.exe daemon 192.168.69.5 8080 192.168.69.5 8800"

case "$1" in
  start)
        echo -n "Starting daemon: "$NAME
   start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
        echo "."
   ;;
  stop)
        echo -n "Stopping daemon: "$NAME
   start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE
        echo "."
   ;;
  restart)
        echo -n "Restarting daemon: "$NAME
   start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE
   start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
   echo "."
   ;;

  *)
   echo "Usage: "$1" {start|stop|restart}"
   exit 1
esac

exit 0

Re: Script

Posted: Mon 28 Nov 2011, 19:03
by nilzen
hrm sekunderna efter jag postade hittade jag detta felmeddelande:

Code: Select all

Unhandled Exception: SwitchKing.Server.BusinessAccess.PlatformStore.PlatformStateException: Failed to turn off device. Error: Could not connect to the Telldus Service
  at SwitchKing.Server.BusinessAccess.Invocation.Engines.InvocationEngine.TurnOff (SwitchKing.Common.Entities.Device d) [0x00000] in <filename unknown>:0 
  at SwitchKing.Server.BusinessAccess.Invocation.Engines.InvocationEngine.PerformAction (DeviceActionEntry entry) [0x00000] in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: SwitchKing.Server.BusinessAccess.PlatformStore.PlatformStateException: Failed to turn off device. Error: Could not connect to the Telldus Service
Verkar som jag får googla lite på Required-Start, som vad jag förstår är en rad med de services som måste vara startade innan detta script ska köras, korrekt?

Re: Script

Posted: Mon 28 Nov 2011, 20:45
by nilzen
Efter lite trixande i hockeypauserna så lärde jag mig lite om hur det fungerar med startup-script i Linux.

Allt detta gäller Ubuntu 10.04 men som jag förstår det ska det även fungera i nyare versioner av Ubuntu.

Om någon mer har samma problem som mig och får felmeddelandet ovan i "/var/log/boot.log" och har registrerat scriptet med "update-rc.d switchking default" så behöver två saker göras.

1. Ta reda på vilken runlevel din maskin bootas upp med och det gör man genom att titta i filen "/etc/init/rc-sysinit.conf", för mig står det "env DEFAULT_RUNLEVEL=2".

2. Kontrollera ordningen switchking och telldusd startas i genom att titta i mappen "/etc/rc2.d/" (där 2:an är siffran som står efter "DEFAULT_RUNLEVEL=", alla filer (symlänkar) i den mappen som börjar med S körs i bokstavsordning, för mig så började både telldusd och switchking på S20 vilket gjorde att switchking startades före telldusd. Löste detta genom att köra kommandot "sudo mv /etc/rc2.d/S20switchking /etc/rc2.d/S30switchking" och sedan boota om maskinen.

Dock så tror jag fortfarande att något är galet med daemon-läget i SK då det inte skrivs något mer i loggen efter "REST Service Running" och jag har saker med högre nummer än S30 och som jag tycker borde skriva ngt i loggen.

Re: Script

Posted: Mon 28 Nov 2011, 21:30
by nilzen
Efter lite mer tweakande så hittade jag "mono-service2" vilket gör att den inte blockerar efterföljande service från att starta upp.

Code: Select all

DAEMON=/usr/bin/mono-service2

Re: Script

Posted: Mon 28 Nov 2011, 22:06
by nilzen
Logga in på Ubuntu och skriv:

Code: Select all

sudo nano /etc/init.d/switchking
Klistra in koden:

Code: Select all

#!/bin/bash

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
DAEMON_NAME=SwitchKing
DAEMON_PATH=/usr/local/switchking/bin/$DAEMON_NAME.exe
DAEMON_ARGS="daemon 192.168.69.5 8080 192.168.69.5 8800"
LOCKFILE=/tmp/$DAEMON_NAME.exe.lock
PIDFILE=/tmp/$DAEMON_NAME.exe.pid

start()
{
    echo -n "Starting daemon: "
    if [ -a $LOCKFILE ]; then
            PID=`cat $LOCKFILE`
            echo  Daemon already running: $PID
            exit 2;
    else
            mono-service2 -l:$LOCKFILE $DAEMON_PATH $DAEMON_ARGS
            while [ ! -f $LOCKFILE ]
                 do
                    sleep 1
                    echo "Waiting for lock file creation"
                 done
            cat $LOCKFILE > $PIDFILE
            echo "started."
            exit 0;
    fi
}

stop()
{
    echo -n "Stopping  daemon: "
    if [ -f $LOCKFILE ]; then
            kill `cat $PIDFILE`
            # Sometimes the mono-service2 does not die properly
            # To avoid a zombie process we make sure it is dead
            kill -9 `cat $PIDFILE`
            sleep 2
            if [ -f $LOCKFILE ]; then
                rm $LOCKFILE
            fi
            echo "Stopped."
            exit 0;
    else
            echo "Daemon is not running"
            exit 2;
    fi
}

case "$1" in 
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo "usage: $0 {start|stop|restart}"
        exit 1

esac
exit $?
Kör följande två kommandon för att registrera scriptet som ett init-script.

Code: Select all

sudo chmod +x /etc/init.d/switchking

Code: Select all

sudo update-rc.d switchking defaults 40
Starta om burken!

Om switchking inte startat upp kör följande kommando och leta efter felmeddelanden.

Code: Select all

cat /var/log/boot.log

Re: Script

Posted: Mon 28 Nov 2011, 22:59
by Martin
:clap: :clap: :clap:

Har tidigare läst på lite om monoservice2 men faktiskt inte fattat hur det ska fungera...

Re: Script

Posted: Tue 29 Nov 2011, 07:47
by nilzen
Du kan gärna städa bort alla poster förutom den senaste så jag inte sprider vilseledande information till någon användare... Verkar som sagt fungera riktigt bra med scriptet ovan, även SwitchKing verkar rulla på bra på Ubuntu 10.04! :D

Re: Script

Posted: Sun 04 Dec 2011, 23:36
by KungenAvPeking
Ny här i beta delen av forumet...

Men ett tips är att redan i

Code: Select all

sudo update-rc.d switchking defaults
lägga till vilken ordning sakerna ska startas upp, genom att lägga till siffran 30 (eller högre om så behövs)

Code: Select all

sudo update-rc.d switchking defaults 30
(Telldus-core startas som 20 i min installation, OWFS ligger redan på 30, så själv lägger jag 40)

Är det så att man redan har lagt till, så kan man köra en

Code: Select all

sudo update-rc.d switchking remove
först och sedan lägga till i rätt ordning... ;)

Re: Script

Posted: Mon 05 Dec 2011, 15:14
by nilzen
Mitt första init-script någonsin så jag tackar och bockar för tipset!