Python skript automatisch nach 30 tagen.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

So ich eröffne nun das Thema für dich neu mein Lieber Lutz :).
also ich hab das Skript mit der Datensicherung. Dieses will ich so ausbauen das es ausgeführt wird und dann soll es überprüfen wann das letzte Backup war und wenn 30 Tage rum sind als es gesichert wurde. Soll dieses kleine Skript sichern.
ich hab schon was von Cronjob gehört, aber Kann ich sowas auch in Python implementieren? es wär mir angenehmer bei 5000 PC's überall Crontab zu machen wäre in meinen Augen zu viel Arbeit. Deswegen dieses Skript das wird auf Server gepackt und jeder User holt es sich :).

hier anbei der Code :)

Code: Alles auswählen

 
#! /usr/bin/env python
import linecache
import sys, dbus
import os
import time
import subprocess
auswahl = 2

if auswahl == 4 :
  outfile=open("daten.ini","w+")
  for line in open("datei.ini"):
      line=line.replace ("X","5")
      outfile.write(line)
      print line
  outfile.close()

elif auswahl == 0 :
  #Die Dateien und Verzeichnisse, die gesichert werden sollen,
    quellen = ['/home/davidlinux/',]
    ziel_verzeichnis = '/etc/dp/Backup'
    heute = ziel_verzeichnis + time.strftime('%Y%m%d')
    jetzt = time.strftime('%H%M%S')
    print 'Sicherung wird gestartet und unter /etc/dp/ gespeichert'
    print 'Druecken Sie 2Mal STRG + C um die Sicherung abzubrechen'

#Erzeuge Ordner wenn dieser noch nicht Existiert mit heutigem Datum:
    if not os.path.exists(heute):
        os.mkdir(heute) # erzeuge das Verzeichnis
        print 'Verzeichnis' , heute, 'erfolgreich angelegt'


# Der Name der Tar-Datei:
    ziel = heute + os.sep + jetzt + '.tar'
    tar_befehl = 'tar -czf %s %s' % (ziel, ' '.join(quellen))
    os.system(tar_befehl)

# Sicherung starten
    try:
        while True:
            exitstatus=os.system(tar_befehl)
            if exitstatus == 0:
                print 'Erfolgreiche Sicherung nach "%s"' % ziel
            else:
                print 'Sicherung fehlgeschlagen! (Statuscode: %d)' % exitstatus
                ans=raw_input("Aktion wird abgebrochen! (Bitte Druecken Sie Enter!): ").lower
                print 'Sicherung abgebrochen'
            break
    except KeyboardInterrupt:
        print "Sicherung beendet"


elif auswahl == 2 :
 def shutdown():
    bus = dbus.SystemBus()
    try:
        remote_object = bus.get_object('org.freedesktop.Hal',
                                    '/org/freedesktop/Hal/devices/computer')
        props = remote_object.Shutdown(dbus_interface='org.freedesktop.Hal.Device.SystemPowerManagement')
    except dbus.exceptions.DBusException, e:
        print e

 if __name__ == "__main__":
    shutdown()



ich hab auch schon auf einer Seite etwas gefunden:

http://forum.computerbild.de/linux/scri ... 68533.html

sowas in der Art möchte ich implementieren :)
senft
User
Beiträge: 25
Registriert: Montag 31. März 2008, 14:47

Ein einfacher Ansatz wäre, speichern wann das Script das letzte mal ausgeführt wurde und dann das aktuelle Datum (z.b. beim Systemstart. Dann müsste natürlich das Script automatisch beim Systemstart mitstarten) damit zu vergleichen..
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ich hab mir nun überlegt diesen link was ich gefunden habe in einer extra Datei zu schreiben, dieses dann aufrufen und sehen was kommt.... joa irgendwie kommen tut was aber nicht was erwartet wird

Traceback (most recent call last):
File "dp_test.py", line 30, in <module>
start_script()
File "dp_test.py", line 16, in start_script
subprocess.call(["dp_client.py"]) #Startet Script
File "/usr/lib/python2.6/subprocess.py", line 444, in call
return Popen(*popenargs, **kwargs).wait()
File "/usr/lib/python2.6/subprocess.py", line 595, in __init__
errread, errwrite)
File "/usr/lib/python2.6/subprocess.py", line 1092, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory

hmm. Senft dein Vorschlag hört sich nett an, aber dann muss ich erst dem skript sagen speicher das und dann in den Systemstart? hm
Naja um jeden Tipp bin ich euch dankbar :)
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

bluelagoon hat geschrieben:ich hab mir nun überlegt diesen link was ich gefunden habe in einer extra Datei zu schreiben, dieses dann aufrufen und sehen was kommt.... joa irgendwie kommen tut was aber nicht was erwartet wird
Ich möchte dir ja nicht zu nahe treten, aber hast du wirklich eine Idee von dem was du da tust?

Hast du jemals das Python-Tutorial durchgearbeitet und verstanden?

Ich weiß im Moment einfach nicht, auf welchem Level ich bei deinen Fragen mit meiner Hilfe ansetzen soll.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

a byte of python hab ich komplett gelesen :).
naja das mit dem Link hab ich zufälligerweise gefunden und hab auch festgestellt das das nicht ansatzweise funktioniert. Aber Sowas in der Art möcht ich machen bzw. muss ich machen.
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Hallo

ich frage mich warum du in deinem Skript das Modul "subprocess" importierst obwohl du es garnicht nutzt und ein gzip komprimiertes Archiv lässt sich doch mit http://docs.python.org/release/2.6.5/li ... le-tarfile erstellen, da braucht man doch nicht mit "os.system" ein externes Programm aufrufen.

Gruß...busfahrer
Alles wird gut ;-)
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ja da hab ich was versucht un vergessn subprocess rauszunehmen.. ^^
naja ich hab das os.system noch drin das tar die klappe hält. ^^
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Wie dir in einem anderen Thread schon gesagt wurde, es macht keinen Sinn in Python die `cron` Funktionalitaet nachzubauen.

Schau dir mal `man cron` und `man crontab` an. Oder v.a. wenn es kein Server ist bzw nicht 24/7 laeuft fcron

Wenn du es aber unbedingt selbst nachbauen willst, solltest du das nicht in _dieses_ Skript einbauen sondern ein eigenstaendiges Skript schreiben, dass dein Backup-Skript wenn noetig startet und die Timestamps (wie von senft vorgeschlagen) aktualisiert.

Etwas zu benutzen, damit man keine Meldungen sieht ... sollte man sich abgewoehnen und die Ursache angehen.
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

okay ich werd mir mal Cron ansehen. danke für den tipp :)
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

so ich hab nun eine Idee :o :D
ich möchte die aktuelle Zeit in mein neues Skript verfassen und dann abgleichen, mit einem festen Tag zum Beispiel jeden 1. des Monats
nur dann is noch die Frage, wenn das Datum passt kann ich dann die Datei so öffnen das es ausgeführt wird? Denn alles was ich über Open gelesen habe, schreibt bzw liest oder schreibt unter dem Datensatz weiter? gäbe es da einen Anderen Befehl evtl? Wäre Dankbar für eine Antwort :)
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

Code: Alles auswählen

#! /usr/bin/env python

import time


from time import *
# aktuelle, lokale Zeit als Tupel
lt = localtime()
wert=strftime("%d%m", lt)
datum= 2209
print wert
print datum
if wert == datum :
 print 'Gelungen'
else:
 print 'Fehler'

~
so hab ne kleine Datei schon erstellt nur zum Test und ich hab hier nen Fehler nur ich versteh net ganz warum, denn wert == datum sind grad dieselben Zahlen um zu Testen ob es so funktionieren könnte nur er gibt immer Fehler aus auch wenn bei print beide Zahlen gleich sind. Was mach ich nur falsch? kann mich da mal jemand bissl aufklären^^
lg BlueLagoon
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Erstmal gibt es bestimmt elegantere Lösungen, auf ein Datum zu prüfen, als dieses in einen String zu verwandeln. Gibt ja eigene Typen dafür.

ABER: guck dir mal an, welchen Typ die Namen haben, die du da vergleichst, und warum das vielleicht nicht klappen könnte...
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

gute frage.... kapier ich nich ^^
die namen sind beide gleich ich habsie sogar auf abkürzungen verändert und keine ahnung ich denke das es relativ einfacher is das datum als string umzuwandeln aber ich denke das wert mit datum sich einfach net verbinden lässt und das is auf gut deutsch zum kotzen -.- ich denk eher das wert den wert nich mitkriegt nur als print ausgibt un das wars und genau deswegen datum und wert sich nie zueinander finden werden.
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Code: Alles auswählen

In [8]: type('2209')
Out[8]: <type 'str'>

In [9]: type(2209)
Out[9]: <type 'int'>
bist du sicher dass du 'a byte of python' gelesen hast?


ps.: und, natürlich, falls du selber nicht drauf kommst:

Code: Alles auswählen

In  [10]: 2209 == '2209'
Out[10]: False
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ich versteh zwar nich womit du mit der Antwort bei mir drauf hinaus willst aber persönlich brauchste mich garnet angreifen bin halt erst 4 wochen mit Python am arbeiten und will halt wissen was es so drauf hat und wenn das nicht mal Datum in Strings umwandeln kann is das Programm sehr schwach.
.robert
User
Beiträge: 274
Registriert: Mittwoch 25. April 2007, 17:59

Alles klar. Dann halt nicht. Viel Spaß mit deinem Script...
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

-.- was soll das hier werden? ich merk selber das wert nich das übernimmt was es soll muss du mich deswegen als Idioten darstellen? sry das ich was lernen wollte mit meinen 28 Jahren.
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

@bluelagoon du wirst doch von @.robert nicht nur mit der Nase sondern schon mit dem ganzen Gesicht auf das Problem gestoßen :shock: Wenn deine Variable "wert" ein String ist und deine Variable "datum" ein Integer dann können die doch nicht gleich sein.

Gruß...busfahrer
Alles wird gut ;-)
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

ja das is mir schon irgendwo klar aber ich muss ja irgendwie sagen können variable du bist int und variable2 du auch -.-
bluelagoon
User
Beiträge: 216
Registriert: Mittwoch 25. August 2010, 12:26

z.b. in VB.NET sag ich

dim zahl as int

zahl= 42

das muss doch irgendwie in python auch so realisierbar sein -.-
Antworten