mecker. mecker. mecker.

Wuala automatisch neustarten [Skript für den Serverbetrieb]

Wuala läuft nie 100% stabil. Das kann sicherlich jeder Nutzer bezeugen - immerhin ist Wuala eine Software im Beta-Stadium (, die dafür dennoch er­staun­lich stabil läuft).

Allerdings ist ein nahezu 100% laufendes Wuala für den Ser­ver­be­trieb wichtig, denn sonst erhält man die 100 Gigabyte Speicher nicht - nur, weil sich Wuala mal wieder ver­ab­schie­det hat und man nicht die Muße hat, stündlich zu gucken, ob noch alles läuft.

alive.py - au­to­ma­ti­sches Neustarten von Wuala, falls es crasht

Ich habe seit einigen Wochen ein Python-Skript in Betrieb , dass einen nahtlosen Betrieb von Wuala erlaubt. Dabei wird das Skript mittels python alive.py user aufgerufen und wird, sobald kein weiterer Prozess von Wuala läuft, Wuala neustarten. Dabei wird Wuala als Hin­ter­grund­pro­zess aufgerufen oder per dtach verbunden.

Zu­sätz­lich kann mit den Argumenten status user bzw. kill user die pid des Wualas für user ausgeben bzw. das Wuala des user killen.

Beispiel: wuala

:::console
# python alive.py wuala &
# python alive.py status wuala
4829

# python alive.py kill wuala
# python alive.py status wuala
None

# screen alive.py wuala #output after two weeks
2010.06.24-01:32:: restart
2010.07.07-11:42:: restart

Hinweise

alive.py [ Download ]

:::python
#!/usr/bin/env python
'''
Author: posativ <info@posativ.org>
Date  : 20. July 2010
Revision: 1

This software can be redistributed and modified under the following restricitons:
1. name the author
2. no commercial use
3. publish any modification

Requirements: python>=2.4 <http://python.org/>, wuala <http://wuala.com/>, root-permissions
Optional    : dtach <http://dtach.sourceforge.net/>
'''

import re
from os import popen
from sys import argv
from time import time, localtime, strftime, sleep

cmd = 'cd ~/wuala; ./wuala > /dev/null &'
#cmd = 'cd ~/wuala; dtach -n ~/dtach ./wuala' #  if you want to use dtach

def ps(user):
    '''returns pid of wuala'''
    s = popen('ps -Fu %s | grep loader[0-9].jar | grep -v grep' % user)
    for line in s:
        m = re.match('%s +(\d+)' % user, line.strip())
        if m:
            return int(m.group(1))
    return None

def kill(user):
    '''kill -9 pid'''
    pid = ps(user)
    killseq = 'kill -9 %s' % pid
    if pid:
        popen("su %s -c '%s'" % (user, killseq))
        sleep(1)

def start(user, cmd):
    '''launch wuala using dtach'''
    popen("su %s -c '%s'" % (user, cmd))

def loop(user):
    '''main loop: checks every 60 seconds, if wuala is running. If not, it will launch wuala'''
    while True:
        if not ps(user):
            print '%s:: restart' % strftime('%Y.%m.%d-%H:%M', localtime(time()))
            start(user, cmd)
        sleep(60*1)

if __name__ == '__main__':

    if len(argv) == 2:
        loop(argv[1])
    elif len(argv) > 2:
        if argv[1] == 'status' and len(argv) == 3:
            print ps(argv[2])
        elif argv[1] == 'kill' and len(argv) == 3:
            kill(argv[2])
    else: print 'usage: %s user' % argv[0]
blog comments powered by Disqus