- 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:
(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:
(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:
(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: