Crontab-Jobs mit PHP erstellen, bearbeiten und löschen?
Lesezeit: 6 Minuten
Ist es möglich, mit PHP Crontab-Jobs zu erstellen, zu bearbeiten und zu löschen?
Ich weiß, wie man die aktuellen Crontab-Jobs des Apache-Benutzers auflistet:
$output = shell_exec('crontab -l');
echo $output;
Aber wie fügt man einen Cron-Job mit PHP hinzu? ‘crontab -e’ würde nur einen Texteditor öffnen und Sie müssen die Einträge manuell bearbeiten, bevor Sie die Datei speichern.
Und wie löscht man einen Cronjob mit PHP? Auch hier müssen Sie dies manuell mit ‘crontab -e’ tun.
Wie füge ich es mit PHP zur Crontab-Jobliste hinzu?
mögliches Duplikat von Cron-Jobs mit PHP und einigen anderen
– Gordon
12. Dezember 2010 um 9:42 Uhr
(Hinweis) die crontab ist nur a Datei
– Gordon
12. Dezember 2010 um 9:46 Uhr
@ Gordon, danke. Ich weiß, dass alles eine Datei ist, aber speichern sie Crontab-Jobs auf demselben Pfad über verschiedene Distributionen hinweg? Außerdem müsste es den Benutzer von Apache wie www-data erhalten und die Privilegien von root haben?
– datasn.io
12. Dezember 2010 um 11:09 Uhr
Ich bin mir nicht sicher, ob sich der Pfad zwischen Distributionen ändert, aber Sie tun gut daran, den Pfad zu einem konfigurierbaren Wert in Ihrem Code zu machen und ihn dann zur Laufzeit festzulegen. Was den Benutzer und die Berechtigungen betrifft: Jeder Benutzer kann eine Crontab haben, die Jobs mit den Rechten ausführt, die diesem Benutzer zugewiesen sind, also ist dies individuell für Ihr System-Setup.
Das obige kann für beide verwendet werden erstellen und bearbeiten/anhängen vorausgesetzt, der Benutzer verfügt über die entsprechende Dateischreibberechtigung.
Jobs löschen:
echo exec('crontab -r');
Beachten Sie auch, dass Apache unter einem bestimmten Benutzer ausgeführt wird und dies normalerweise nicht root ist, was bedeutet, dass die Cron-Jobs nur für den Apache-Benutzer geändert werden können, sofern nicht angegeben crontab -u Privileg für den Apache-Benutzer.
Würde ‘crontab -r’ nicht alle Jobs des Benutzers löschen? Gibt es eine Möglichkeit, eine bestimmte Jobzeile in den Crontabs des Benutzers zu löschen? Laden, suchen und dann die gefundene Zeile löschen scheint der einzige Weg zu sein.
– datasn.io
12. Dezember 2010 um 11:26 Uhr
Sie können Pipes verwenden, anstatt eine temporäre Datei zu schreiben
– reichfoo
3. Februar 2012 um 8:34 Uhr
Schöne Lösung aber shell_exec('crontab -l') gibt nur die letzte Zeile zurück. ich benutzte exec('crontab -l', $output). Implodieren Sie dann das $output-Array in einen String (mit \n als Kleber).
– David Fairbanks
23. Dezember 2012 um 1:35 Uhr
@Rahul, wenn Serveranbieter keine Shell-Befehle wie bereitgestellt haben system(), passthru() , shell_exec() und exec()versuchen Sie, das mit dem Hosting gelieferte Control Panel zu verwenden, z. B. cPanel oder Plesk.
– Raubvogel
10. Juli 2014 um 3:15 Uhr
Dadurch wird jedes Mal derselbe Job in einer Datei angehängt. (markiert) Gibt es eine Möglichkeit, zuerst die übereinstimmenden Jobs zu entfernen und dann einen neuen zu schreiben?
– RT
17. Dezember 2014 um 8:03 Uhr
Chris Suszyński
Wir haben kürzlich ein Miniprojekt (PHP>=5.3) vorbereitet, um die Cron-Dateien für private und individuelle Aufgaben zu verwalten. Dieses Tool verbindet und verwaltet die Cron-Dateien, damit Sie sie beispielsweise pro Projekt verwenden können. Unit-Tests verfügbar 🙂
Funktion append_cronjob funktioniert bei mir nicht. Ich bekomme die Ausgabe ‘-‘ existiert nicht: Array ( [0] => ‘-‘ existiert nicht. [1] => Verwendung: crontab-Datei [2] => Crontab [ -e | -l | -r ] [3] => -e (Crontab des Benutzers bearbeiten) [4] => -l (Crontab des Benutzers auflisten) [5] => -r (crontab des Benutzers löschen) )
– Benutzer1307016
5. Januar 2015 um 12:42 Uhr
exec(‘echo -e “crontab -l\n’.$command.'” | crontab -‘, $output); ist es richtig. Ich erhalte kein crontab für www-data “-“:0: schlimme Minutenfehler in crontab-Datei, kann nicht installiert werden.
– Rahul Tailwal
31. Januar 2015 um 4:52 Uhr
Crontab grenzt Jobs mit Zeilenumbrüchen (newlines) ab. Jeder Job belegt eine Zeile. Wenn crontab also in der ersten Spalte einer Zeile etwas anderes als eine ganze Zahl sieht, wird der Fehler „schlechte Minute“ ausgegeben, da das minute-Argument das erste ist, auf das crontab stößt. sieh dir das an dougv.com/2006/12/…
– RafaSashi
31. Januar 2015 um 7:39 Uhr
danke … wie kann ich cron_TZ mit Ihrem Projekt verwenden?
Sie könnten versuchen, die zu überschreiben EDITOR Umgebungsvariable mit etwas wie ed die eine Folge von Bearbeitungsbefehlen über die Standardeingabe annehmen kann.
diedom
Hängt davon ab, wo Sie Ihre Crontab speichern:
shell_exec('echo "'. $job .'" >> crontab');
9861400cookie-checkCrontab-Jobs mit PHP erstellen, bearbeiten und löschen?yes
mögliches Duplikat von Cron-Jobs mit PHP und einigen anderen
– Gordon
12. Dezember 2010 um 9:42 Uhr
(Hinweis) die crontab ist nur a Datei
– Gordon
12. Dezember 2010 um 9:46 Uhr
@ Gordon, danke. Ich weiß, dass alles eine Datei ist, aber speichern sie Crontab-Jobs auf demselben Pfad über verschiedene Distributionen hinweg? Außerdem müsste es den Benutzer von Apache wie www-data erhalten und die Privilegien von root haben?
– datasn.io
12. Dezember 2010 um 11:09 Uhr
Ich bin mir nicht sicher, ob sich der Pfad zwischen Distributionen ändert, aber Sie tun gut daran, den Pfad zu einem konfigurierbaren Wert in Ihrem Code zu machen und ihn dann zur Laufzeit festzulegen. Was den Benutzer und die Berechtigungen betrifft: Jeder Benutzer kann eine Crontab haben, die Jobs mit den Rechten ausführt, die diesem Benutzer zugewiesen sind, also ist dies individuell für Ihr System-Setup.
– Gordon
12. Dezember 2010 um 12:13 Uhr
Siehe auch stackoverflow.com/q/3186471/632951
– Schrittmacher
3. Februar 2015 um 16:28 Uhr