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 erstaunlich stabil läuft).
Allerdings ist ein nahezu 100% laufendes Wuala für den Serverbetrieb wichtig, denn sonst erhält man die 100 Gigabyte Speicher nicht - nur, weil sich Wuala mal wieder verabschiedet hat und man nicht die Muße hat, stündlich zu gucken, ob noch alles läuft.
alive.py - automatisches 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 Hintergrundprozess aufgerufen oder per dtach verbunden.
Zusätzlich 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
- Wuala muss per default in ~/wuala installiert sein, sonst muss man selbst Hand in
cmdanlegen. - das Skript muss mit root-Rechten laufen
- zur Vereinfachung empfehle ich screen
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]