$orch['enabled'], 'cron' => $orch['cron']]; foreach ($orch['children'] ?? [] as $child) { $treeMap[$child['id']] = ['enabled' => $child['enabled'], 'cron' => $child['cron']]; } } ?>
ToggleSaves immediately — no button needed
Cron5-field expression  */30 * * * *
⚡ BadgeFires on array start or stop — not cron
Save ScheduleWrites all cron fields at once
RunExecute now; log opens on the right
Dry RunSame as Run with DRY_RUN=1 — no writes
■ StopKill running script and clear any stuck locks
VerbosePass --log for detailed output
LogOpen log — auto-scrolls; scroll up to pause, bottom to resume
Custom Scripts script
Suggested Schedules
$block): $scripts = $block['scripts']; $schedule = $block['schedule']; // Extract just the 5-field cron from schedule string $schedParts = preg_split('/\s+/', $schedule, 6); $cronOnly = (count($schedParts) >= 5) ? implode(' ', array_slice($schedParts, 0, 5)) : ''; $schedLabel = (count($schedParts) >= 6) ? trim($schedParts[5], '() ') : $schedule; // Status: any matching script configured? $configured = false; $enabled = false; foreach ($scripts as $s) { if (isset($treeMap[$s['rel']])) { $configured = true; if ($treeMap[$s['rel']]['enabled']) $enabled = true; } } // Trim trailing blank desc lines $desc = $block['desc']; while (!empty($desc) && trim(end($desc)) === '') array_pop($desc); ?>

user_script_plug-in.sh not found at

/dev/null', $psLines); foreach ($psLines as $line) { if (preg_match('#' . preg_quote(SCRIPTS_DIR, '#') . '/([^\s]+\.sh)#', $line, $rm)) { $runningScripts[] = basename($rm[1], '.sh'); } } $runningScripts = array_unique($runningScripts); ?>