CronJobs - die Alternative

Status
Für weitere Antworten geschlossen.

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Nachdem ich gesehen habe, dass die /etc/crontab auf Interesse stößt, hab ich mal ein kleines, funktionierendes Web-Interface dazu gemacht.

(1) Anlegen eines PHP-Skriptes im Verzeichnis /usr/syno/synoman/phpsrc/cronjobs/cronjobs.php mit folgendem Inhalt:

Rich (BBCode):
<?php
if ($_REQUEST['action'] == 'save') {
  $out='';
  for($r=1;$r<=$_REQUEST['rows'];++$r) 
    if ($_REQUEST['r'.$r.'c0']!='') for($c=0;$c<7;++$c) $out.=$_REQUEST['r'.$r.'c'.$c].($c<6?chr(9):chr(10));
  file_put_contents('/etc/crontab', $out);
  exec('killall crond;crond'); 
  }
$filearray=file('/etc/crontab');
$_REQUEST['action'] == '';
?>
<html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>cronjobs</title>
<style>body,input{font:12px Arial;margin-right:1px;margin-bottom:1px}h3{font-family:Arial}
body{background-color:#ddf}</style>
<script>
function mark(r) {
  var e=document.getElementsByName(r+'c0')[0];
  if (e.value.charAt(0)=='#') 
    for (var i=0;i<7;++i) document.getElementsByName(r+'c'+i)[0].style.color='#444';
  else
    for (var i=0;i<7;++i) document.getElementsByName(r+'c'+i)[0].style.color='#090';
}
</script> 
</head><body><h3>CronJobs</h3>
<form method="post" action="cronjobs.php">
<input type="hidden" id="action" name="action" value="">
<?php
$r=0;
foreach($filearray as $rec) {
  $r++; $c=0;$f=explode(chr(9),$rec);
  print '<input title="*|0..59: 8 1,3,5 2-5 * */2" name="r'.$r.'c0" type="text" size="8" '.($r==1?'readonly':'').' value="'.$f[0].'"/>';
  print '<input title="*|0..23: 8 1,3,5 2-5 * */2" name="r'.$r.'c1" type="text" size="7" '.($r==1?'readonly':'').' value="'.$f[1].'"/>';
  print '<input title="*|1..31: 8 1,3,5 2-5 * */2" name="r'.$r.'c2" type="text" size="7" '.($r==1?'readonly':'').' value="'.$f[2].'"/>';
  print '<input title="*|1..12: 8 1,3,5 2-5 * */2" name="r'.$r.'c3" type="text" size="7" '.($r==1?'readonly':'').' value="'.$f[3].'"/>';
  print '<input title="*|0..7: so=0/7 sa=6" name="r'.$r.'c4" type="text" size="7" '.($r==1?'readonly':'').' value="'.$f[4].'"/>';
  print '<input name="r'.$r.'c5" type="text" size="7" '.($r==1?'readonly':'').' value="'.$f[5].'"/>';
  print '<input name="r'.$r.'c6" type="text" size="40" '.($r==1?'readonly':'').' value="'.$f[6].'"/>';
  if ($r>1) {
    print '<script>mark("r'.$r.'")</script>';
?>
<input type="button" value="X" title="delete"
          onclick="for (var i=0;i<7;++i) document.getElementsByName('r<?php print $r ?>c'+i)[0].value=''"/>
<input type="button" value="#" title="activate / deactivate"
          onclick="var v=document.getElementsByName('r<?php print $r ?>c0')[0];
          if (v.value.charAt(0)!='#') v.value='#'+v.value;else v.value=v.value.substring(1); mark('r<?php print $r ?>')"/>
<?php }
  print '<br/>';                   
  }
$rmax=2+$r++;
for($r;$r<=$rmax;$r++) {
  print '<input title="*|0..59: 8 1,3,5 2-5 * */2" name="r'.$r.'c0" type="text" size="8" value=""/>';
  print '<input title="*|0..23: 8 1,3,5 2-5 * */2" name="r'.$r.'c1" type="text" size="7" value=""/>';
  print '<input title="*|1..31: 8 1,3,5 2-5 * */2" name="r'.$r.'c2" type="text" size="7" value=""/>';
  print '<input title="*|1..12: 8 1,3,5 2-5 * */2" name="r'.$r.'c3" type="text" size="7" value=""/>';
  print '<input title="*|0..7: so=0/7 sa=6" name="r'.$r.'c4" type="text" size="7" value=""/>';
  print '<input name="r'.$r.'c5" type="text" size="7" value=""/>';
  print '<input name="r'.$r.'c6" type="text" size="40" value=""/>';
?>
<input type="button" value="X" title="delete"
          onclick="for (var i=0;i<7;++i) document.getElementsByName('r<?php print $r ?>c'+i)[0].value=''"/>
<input type="button" value="#" title="activate / deactivate"
          onclick="var v=document.getElementsByName('r<?php print $r ?>c0')[0];
          if (v.value.charAt(0)!='#') v.value='#'+v.value;else v.value=v.value.substring(1); mark('r<?php print $r ?>')"/><br/>
<?php } ?>
<input type="hidden" name="rows" value="<?php print --$r ?>"/>
<input type="button" value="save /etc/crontab & restart crond" style="margin-top:6px" 
onclick="document.getElementById('action').value='save';submit()"/>
</form></body></html>

(2) Test mit https://Name_des_DS:5001/phpsrc/cronjobs/cronjobs.php

(3) Integration als 3rd-party-apps: Anlegen der Datei /usr/syno/synoman/webman/3rdparty/cronjobs/application.cfg mit folgendem Inhalt:

Rich (BBCode):
text = cronjobs
description = cronjobs
type = embedded
path = /phpsrc/cronjobs/cronjobs.php

(4) DS Manager neu aufrufen und testen.

Funktionsweise:
Skript lädt /etc/crontab und zeigt den Inhalte an. Erst wenn "save /etc/crontab & restart crond" gedrückt wird, wird die komplette Datei /etc/crontab mit den neuen Inhalten überschrieben. Danach der crond gestoppt und wieder gestartet.

Grüne Zeilen = aktive Jobs
Graue Zeilen = deaktivierte Jobs
Wenn man mit dem Cursor über Zellen streicht, dann gibt es ein wenig Hilfe.
X = löscht den Zeileninhalt und wird dann auch nicht mehr in die Datei gespeichert
# = kommentiert die Zeile aus (deaktiviert den Job, wenn zurückgeschrieben)
Es werden immer am Ende 2 Leerzeilen angezeigt für neue Jobs. Wenn man noch mehr Zeilen erfassen will, dann "save ..." und schon sind weitere 2 Leerzeilen da.

Hier das obligatorische Bildchen:
 

Anhänge

  • cronjobs.jpg
    cronjobs.jpg
    56,3 KB · Aufrufe: 4.826

DSL-Hexe

Benutzer
Mitglied seit
01. Apr 2008
Beiträge
692
Punkte für Reaktionen
4
Punkte
44
Klasse das werde ich morgen probieren.
 

flicflac

Benutzer
Mitglied seit
13. Feb 2007
Beiträge
206
Punkte für Reaktionen
0
Punkte
0
@itari

Du hast in letzter Zeit hier im Forum verschiedene interessante Vorschläge für die Erweiterung der Synology Stations gemacht. Könntest du diese nicht auch auf einer eigenen Website zusammenfassen, damit man diese bei Bedarf nicht hier mühsam zusammen suchen muss?

Mit der Cronjob-Tabelle stellst du eine Möglichkeit zur Verfügung, die ich auch bei einzelnen professionellen Hosting-Firmen immer noch vermisse. Gratulation und vielen Dank.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
verschiedene interessante Vorschläge für die Erweiterung der Synology Stations gemacht. Könntest du diese nicht auch auf einer eigenen Website zusammenfassen, damit man diese bei Bedarf nicht hier mühsam zusammen suchen muss?

@flicflac, danke für die Blumen :)

genau genommen bastel ich ja keine Erweiterungen der DS. Die von mir eingesetzten Kommandos/Programme usw. sind ja alle bereits da bzw. lassen sich durch ipkg installieren. Was ich hier mache, ist lediglich ein Kombinieren dieser Programme, so dass sie 'hübsch' auf der Weboberfläche des Disk Station Managers aussehen. Wenn du das auch so siehst, dann kannst du dir die Skripte anschauen, Ideen sammeln und vielleicht selbst auch so etwas basteln. Das würde mir gefallen, und ich würde deine Mühe dann auch gerne würdigen ;). Aber meine paar Skripte auf einer eigenen Webseite, ich glaube, dass lohnt sich nicht wirklich.
 

juergen@net

Benutzer
Mitglied seit
28. Mai 2008
Beiträge
323
Punkte für Reaktionen
0
Punkte
0
Super, so ein Teil brauche ich, vielen Dank!
Werde das testen, sobald ich wieder an meiner DS bin.
Habe eine umfangreiche crontab, allerdings auch mit vielen Kommentaren und Leerzeilen. Was passiert mit diesen Zeilen? Bleiben die unverändert erhalten, oder werden diese gelöscht/modifiziert?
Vielen Dank!
Gruss
Juergen
 

DSL-Hexe

Benutzer
Mitglied seit
01. Apr 2008
Beiträge
692
Punkte für Reaktionen
4
Punkte
44
@itari
Du hast in letzter Zeit hier im Forum verschiedene interessante Vorschläge für die Erweiterung der Synology Stations gemacht. Könntest du diese nicht auch auf einer eigenen Website zusammenfassen, damit man diese bei Bedarf nicht hier mühsam zusammen suchen muss?

Ich muss mich anschliessen mit den Blumen, Klasse Arbeit Itari.

@flicflac @Admin @Moderatoren
Du musst bedenken das eine Website und der Speicherplatz Geld kostet und deshalb finde ich das hier mal der Admin etliche Beiträge von Itari Sticky setzen sollte oder ein extra Bereich "3rdParty Application" aufmachen sollte und dorthin sollten die Scripte von Itary wandern.
 

.:@rpy:.

Benutzer
Mitglied seit
21. Okt 2007
Beiträge
105
Punkte für Reaktionen
0
Punkte
0
Aber meine paar Skripte auf einer eigenen Webseite, ich glaube, dass lohnt sich nicht wirklich.
@itari;

Sag mal, bist du einfach nur bescheiden, oder bist du bereits dermassen abgebrüht, das du einfach nur das Potenzial deiner Posts nicht mehr erkennst:eek:?

Ich muss schon sagen,flicflacs Tutorials haben mir erst die Augen geöffnet, denke mal, die hat sich hier jeder schonmal reingezogen.Und ich sortiere meine rss-Newsfeeds immer nach deinem Usernamen...:D
Ausserdem ist das Arbeiten mit HyperText für Verwöhnte Desktopuser ziemlich suspekt...auf Textbasis, so ganz ohne Sanduhr?

Ich vermisse hier in diesem Forum sowieso so etwas wie einen generellen ROTEN FADEN! Klar, man findet hier Antworten auf (fast) alle Fragen, allerdings muss man die sich mühselig zusammensuchen, und wehe, man weiss nicht, wie man Fragen muss...:mad:

Ich hätte da einen Vorschlag;Man könnte ja so etwas wie eine DS-ServerBibel oder "DS-Knigge" einrichten und als "Sticky" oben in den einzelnen Foren Verankern...achja...-LIEBE MODERATOREN-Warum gibt es hier eigentlich keine "Stickies?":confused:
 
Zuletzt bearbeitet:

DSL-Hexe

Benutzer
Mitglied seit
01. Apr 2008
Beiträge
692
Punkte für Reaktionen
4
Punkte
44
Ist diese Meldung im telnet i.O.?
Code:
NAS-Server> sh /etc/crontab
/etc/crontab: /etc/crontab: 2: */5: not found

.:@rpy:. schrieb:
Ich hätte da einen Vorschlag;Man könnte ja so etwas wie eine DS-ServerBibel oder "DS-Knigge" einrichten und als "Sticky" oben in den einzelnen Foren Verankern...achja...-LIEBE MODERATOREN-Warum gibt es hier eigentlich keine "Stickies?
Werde mal ganz vorsichtig anfragen.
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Habe eine umfangreiche crontab, allerdings auch mit vielen Kommentaren und Leerzeilen. Was passiert mit diesen Zeilen? Bleiben die unverändert erhalten, oder werden diese gelöscht/modifiziert?

Ganz leere Zeilen werden gelöscht. Zeilen die einen # (Hash) am Anfang haben, bleiben drin, werden aber nicht ausgeführt (macht der crond immer so). Ansonsten bleibt alles so, wie es war, bis auf deine Änderungen. Tabs sind allerdings zwingend!!!!

Tipp: änder mal im Skript die Zeile, wo die Datei ausgegeben wird: statt /etc/crontab mach /etc/crontab1. Dann kannst genau zwischen den beiden Dateien vergleichen, was passiert ist.

itari
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Ist diese Meldung im telnet i.O.?
Code:
NAS-Server> sh /etc/crontab
/etc/crontab: /etc/crontab: 2: */5: not found

Die /etc/crontab ist kein !!!! Skript, welches man per sh aufruft kann. Sie wird vom crond abgearbeitet. Insofern ist die Fehlermeldung einfach ok, weil es so nicht geht :D

Also ändern und dann wird durch den Button der crond gerestartet und dann ein wenig Geduld und schon siehst das Ergebnis ... :)

Alles klar Hexchen? ;)

Gruß itari
 

DSL-Hexe

Benutzer
Mitglied seit
01. Apr 2008
Beiträge
692
Punkte für Reaktionen
4
Punkte
44
OK Danke, da war ich als Fensterverwöhnteruser ganz schön auf dem Holzweg. ;)
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
@itari;

Sag mal, bist du einfach nur bescheiden

:D:D:D

Ich finde das Forum gut so. Weil es einfach eine riesige Fundstätte geworden ist. Chaotisch zwar, aber besser so, als wenn die Themen in eine Struktur gezwängt wären, in der man sich auch :D nicht zurecht findet. Schau dir doch mal das englische Forum an. Moderiert und in 100 Themen geordnet und 20x pro Thema gestickt--- findest da was auf Anhieb? Dort gibt es auch ein Wiki. Und schaust da oft rein? Findest die Sachen, die du brauchst? Weißt welcher Aufwand dahinter steckt? Wer soll das machen? Würdest du es tun? :rolleyes:

Grüße itari
 
Zuletzt bearbeitet:

DSL-Hexe

Benutzer
Mitglied seit
01. Apr 2008
Beiträge
692
Punkte für Reaktionen
4
Punkte
44
offtopic schrieb:
Etwas zum Thema Forum:
  1. Es muss ein Bereich "3rdparty" her
  2. Im Bereich "3rdpaty" sollte die 3rdParty Anleitung Sticky sein
  3. Im Bereich "3rdpaty" sollte alles rausfliegen was keine 3rdParty Skripte sind
  4. Ich würde mich zur Verfügung stellen als Moderator für diesen Bereich zu engagieren und meine Freizeit opfern
  5. Warum??? Weil ich die Skripte von Itari einfach nur klasse finde und weil ich eine Leih-DS207+ von der TWOCOM gesponsert bekommen habe und etwas zurück geben möchte.

Das ist mein Senf dazu. ;)
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
@Hexe,

hast du schon mal den Forums-Betreibern was geschrieben? Ganz unten auf der Seite gibt einen Link, der heißt Kontakt. Ich glaube nämlich nicht, dass dein Beitrag sonst gelesen wird.

Gruß itari
 

DSL-Hexe

Benutzer
Mitglied seit
01. Apr 2008
Beiträge
692
Punkte für Reaktionen
4
Punkte
44
Ich habe den Forumsbetreiber angeschrieben und den den Deutschen Distributor TWOCOM Herr H. das hier etwas passieren muss.
 

DSL-Hexe

Benutzer
Mitglied seit
01. Apr 2008
Beiträge
692
Punkte für Reaktionen
4
Punkte
44
Mal wieder etwas zum Thema:

Könnte man in der cronjobs.php eine Abfrage einfügen welcher Job das letzte mal ausgeführt würde? Oder ist dieses nicht machbar? Ist nur ein Gedanke von mir. ;)
 

.:@rpy:.

Benutzer
Mitglied seit
21. Okt 2007
Beiträge
105
Punkte für Reaktionen
0
Punkte
0
Ich finde das Forum gut so

Ich ja auch...eigentlich...

Weil es einfach eine riesige Fundstätte geworden ist

...du sagst es...allerdings im Stil von Dungeons 'n Dragons...;) eben weil

Chaotisch zwar, aber besser so, als wenn die Themen in eine Struktur gezwängt wären, in der man sich auch :D nicht zurecht findet

Aufwand...ist klar.Ich finde aber, das wäre es Wert.Diverse Unterforen 3rd-Party, LowLevelModding (mit Scripten, IPKG installationen undso..) und HighLevelModding (Opensource und Crosscompiling per Toolchain undso..):D
Ich liebe Modifizierbare Hardware...und ich kenne das aus den Mobile-Devices Foren auch, dass Strukturen Funktionieren können.Sie müssen halt Vorhanden sein.

Sorry,aber das Deutsche SynologyForum ist da etwas unflexibel dargestellt;Nichts für Ungut, aber eher aus der Notwendigkeit heraus, als aus Leidenschaft...;)
 

juergen@net

Benutzer
Mitglied seit
28. Mai 2008
Beiträge
323
Punkte für Reaktionen
0
Punkte
0

.:@rpy:.

Benutzer
Mitglied seit
21. Okt 2007
Beiträge
105
Punkte für Reaktionen
0
Punkte
0
Achtung: Hierzu sind ein paar Änderungen in einer Konfigurationsdatei erforderlich; diese sollte daher immer vorher kopiert werden (z.B. cp xxx xxx.org). Wie immer erfolgen alle Änderungen mit telnet-Aufruf auf der DS und auf eigene Kappe :D

Voraussetzung: Die Option HTTPS-Verbindung ist aktiv, d. h. auf den Web Station Manager wird mit https://IP_der_DS:5001 zugegriffen.

(1) PHP-Skripte sollen von dem System-Web-Server auch ausgeführt werden. Dazu sind 2 Zeilen in der Datei /usr/syno/apache/conf/httpd.conf-sys am Ende einzutragen:

(Daran denken, eine Kopie der Datei vorher anzufertigen.)

AddType application/x-httpd-php .php
LoadModule php5_module /lib/libphp5.so


(2) Den System-Web-Server neu starten: /usr/syno/etc/rc.d/S97apache-sys.sh restart

...denke ich...
 

juergen@net

Benutzer
Mitglied seit
28. Mai 2008
Beiträge
323
Punkte für Reaktionen
0
Punkte
0
Das wars. Super, vielen Dank, und schon bin ich wieder ein Stueckchen weiter.

Allerdings erscheint die 3rd Party Application nicht, obwohl ich die application.cfg eingefügt habe.

UND
@itari
Das php-Sript kann nicht mit ' und " umgehen. In Komments verwirft es ab " und ' den Rest der Zeile. In scharfen Anweisungen macht es '\ aus einem '. " und ' brauch ich aber wenn Blanks in den Namen vokommen....
Ausserdem wäre eine Kopiermöglichkeit einer komplette Zeile hilfreich.
Und noch runder wäre s, wenn in Kommetarzeilen alles nach dem ersten # in dem größten Textfeld angezeigt wuerde.

Gruss

Juergen
 
Zuletzt bearbeitet:
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat