Hi Leute,
Ich habe eine Frage zur Datenspeicherung in Python. Gibt es die Möglichkeit das file-Objekt als root zu benutzen, sodass aber nur diese eine Aktion mit root Rechten bearbeitet wird. Ich möchte das Daemon Cron verwenden, weshalb ich in die Datei /etc/crontab bearbeiten muss. Diese Datei lässt sich aber nur mit root Rechten beschreiben.
Notlösung:
Anderes Pythonscript mit os.system als root öffnen, welche dann die Datei bearbeiten soll.
Ich hoffe ihr könnt mir helfen.
Datenspeicherung als root
Es ist möglich, aber sehr sehr unsauber. afair geht das nur via os.system()
Da ist diese Lösung sauberer: Änder die Rechte der datei so, dass auch der Benutzer, der sie ausführt, zugriff drauf hat. (entweder mit chown oder mit chmod, oder chgrp)
Ich verstehe nicht, warum du die crontab mit einem pyscript bearbeiten willst. Wenn es sich um ein admin-programm handelt, solltest du den script eh als root ausführen.
Grüße
Da ist diese Lösung sauberer: Änder die Rechte der datei so, dass auch der Benutzer, der sie ausführt, zugriff drauf hat. (entweder mit chown oder mit chmod, oder chgrp)
Ich verstehe nicht, warum du die crontab mit einem pyscript bearbeiten willst. Wenn es sich um ein admin-programm handelt, solltest du den script eh als root ausführen.
Grüße
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Ubuntuxer!Ubuntuxer hat geschrieben:Ich möchte das Daemon Cron verwenden, weshalb ich in die Datei /etc/crontab bearbeiten muss.
Jeder Benutzer kann auch seine eigene Crontab haben. Diese befinden sich normalerweise unter */var/spool/cron/crontabs* und werden mit dem Befehl ``crontab -u <benutzer> -e`` editiert.
Siehe ``man cron``.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
greift ins System ein und könnte es vielleicht unsicher machen?Da ist diese Lösung sauberer: Änder die Rechte der datei so, dass auch der Benutzer, der sie ausführt, zugriff drauf hat. (entweder mit chown oder mit chmod, oder chgrp)
Wenn ich crontab -e ausführe, öffnet sich bei mir im Terminal direkt der Editor Nano; ich weiß aber nicht wie ich mit Python die Eingabe und das speichern machen kann.Jeder Benutzer kann auch seine eigene Crontab haben. Diese befinden sich normalerweise unter */var/spool/cron/crontabs* und werden mit dem Befehl ``crontab -u <benutzer> -e`` editiert.
Deshalb wollte ich direkt die crontab Datei verändern. doch aus irgendeinem Grund kann ich auch die Datei /var/spool/cron/crontabs/johannes nicht ohne root Rechte ändern. obwohl ich als Benutzer johannes angemeldet bin. (Hardy Heron)
Man kann sich die crontab ja vorher ausgeben lassen (``crontab -l``), ändern und dann wieder setzen (``crontab $datei`` (oder eben stdin oder whatever)). Und ``crontab -e`` startet den Editor, der in der EDITOR-Umgebungsvariable angegeben ist.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo Ubuntuxer!Ubuntuxer hat geschrieben:Wenn ich crontab -e ausführe, öffnet sich bei mir im Terminal direkt der Editor Nano
Dieser Befehl
Code: Alles auswählen
echo "10 10 * * * uuu" | crontab -u gerold -
Du kannst dir das in Python zu nutze machen. Nimm ``subprocess`` um eine Verbindung zu ``crontab -u gerold -`` ("gerold" ist der Benutzername; der Bindestrich ist wichtig) aufzunehmen. Dann kannst du über STDIN des Progrogramms den neuen Inhalt der Crontab bestimmen.
Der Befehl ``crontab -u gerold -l`` gibt den Inhalt einer evt. existierenden crontab für den Benutzer "gerold" aus.
Die Parameter "-u" und der Benutzername können und sollen natürlich weggelassen werden, wenn der Befehl nicht als root ausgeführt wird.
Ein Beispiel:
Code: Alles auswählen
#!/usr/bin/env python
import subprocess
# Alte Eintraege holen
args = ["crontab", "-u", "gerold", "-l"]
proc = subprocess.Popen(args, stdout = subprocess.PIPE)
items = proc.stdout.readlines()
proc.stdout.close()
# Neuen Eintrag hinzufuegen
items.append("20 20 * * * xxxxxxxx\n")
# Alte und neue Eintraege schreiben
args = ["crontab", "-u", "gerold", "-"]
proc = subprocess.Popen(args, stdin = subprocess.PIPE)
proc.stdin.writelines(items)
proc.stdin.close()
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Ich habe das Programm anacron gefunden, Scheint eine gute Alternative zu cron sein, welche auch funktioniert wenn der PC ausgeschaltet ist.
Doch ich habe noch zwei Fragen:
1) Wenn ich in eine crontab @daily schreibe, funktioniert das dann, wie bei anacron, also auch wenn der PC zwischendurch aus ist?
2) Kann man einen anacrontab auch ohne sudo Rechte anlegen?
PS: Das ganze soll eine Art Update Funktion werden.
Doch ich habe noch zwei Fragen:
1) Wenn ich in eine crontab @daily schreibe, funktioniert das dann, wie bei anacron, also auch wenn der PC zwischendurch aus ist?
2) Kann man einen anacrontab auch ohne sudo Rechte anlegen?
PS: Das ganze soll eine Art Update Funktion werden.
Das ist keine Alternative, dass ist eine Ergänzung. Anacron ist für das Zusammenspiel mit vixie-cron entwickelt worden, um ihn eben um diese Funktionalität zu erweitern. Eine echte Alternative wäre beispielsweise "fcron".Ubuntuxer hat geschrieben:Ich habe das Programm anacron gefunden, Scheint eine gute Alternative zu cron sein, welche auch funktioniert wenn der PC ausgeschaltet ist.