Fix: Laravel Scheduler cron + sudoers für --check-only + CheckUpdates Fallback

- ensure_system() installiert /etc/cron.d/mailwolt für schedule:run
- sudoers: www-data darf mailwolt-update --check-only aufrufen
- CheckUpdates: if/elseif → echter Fallback auf mailwolt-fetch-tags

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
main v1.1.286
boban 2026-04-26 10:13:05 +02:00
parent 871d69cc2d
commit 996c9c19fe
2 changed files with 16 additions and 3 deletions

View File

@ -24,10 +24,14 @@ class CheckUpdates extends Command
$updateBin = '/usr/local/sbin/mailwolt-update'; $updateBin = '/usr/local/sbin/mailwolt-update';
$fetchHelper = '/usr/local/sbin/mailwolt-fetch-tags'; $fetchHelper = '/usr/local/sbin/mailwolt-fetch-tags';
// Beide versuchen — --check-only schreibt version_remote, fetch-tags als Fallback
$fetched = false;
if (file_exists($updateBin) && str_contains((string) @file_get_contents($updateBin), '--check-only')) { if (file_exists($updateBin) && str_contains((string) @file_get_contents($updateBin), '--check-only')) {
shell_exec('sudo -n ' . escapeshellarg($updateBin) . ' --check-only 2>/dev/null'); $result = @shell_exec('sudo -n ' . escapeshellarg($updateBin) . ' --check-only 2>/dev/null');
} elseif (file_exists($fetchHelper)) { $fetched = ($result !== null);
shell_exec('sudo -n ' . escapeshellarg($fetchHelper) . ' 2>/dev/null'); }
if (!$fetched && file_exists($fetchHelper)) {
@shell_exec('sudo -n ' . escapeshellarg($fetchHelper) . ' 2>/dev/null');
} }
// Version_remote wurde von einem der Helfer geschrieben; frisch genug wenn < 2h alt // Version_remote wurde von einem der Helfer geschrieben; frisch genug wenn < 2h alt

View File

@ -166,8 +166,17 @@ ensure_system(){
# Sudoers-Regeln nachrüsten # Sudoers-Regeln nachrüsten
for f in /etc/sudoers.d/mailwolt-certbot /etc/sudoers.d/mailwolt-dkim; do for f in /etc/sudoers.d/mailwolt-certbot /etc/sudoers.d/mailwolt-dkim; do
_sudoers_add "$f" 'www-data ALL=(root) NOPASSWD: /usr/local/sbin/mailwolt-fetch-tags' _sudoers_add "$f" 'www-data ALL=(root) NOPASSWD: /usr/local/sbin/mailwolt-fetch-tags'
_sudoers_add "$f" 'www-data ALL=(root) NOPASSWD: /usr/local/sbin/mailwolt-update --check-only'
_sudoers_add "$f" 'www-data ALL=(root) NOPASSWD: /usr/bin/openssl x509 -enddate -noout -in /etc/letsencrypt/live/*/fullchain.pem' _sudoers_add "$f" 'www-data ALL=(root) NOPASSWD: /usr/bin/openssl x509 -enddate -noout -in /etc/letsencrypt/live/*/fullchain.pem'
done done
# Laravel Scheduler cron (schedule:run muss jede Minute laufen)
local cron_file="/etc/cron.d/mailwolt"
local cron_line="* * * * * www-data php ${APP_DIR}/artisan schedule:run >> /dev/null 2>&1"
if ! grep -qF "artisan schedule:run" "${cron_file}" 2>/dev/null; then
printf '%s\n' "${cron_line}" > "${cron_file}"
chmod 644 "${cron_file}"
echo "[✓] Laravel Scheduler cron installiert."
fi
} }
# -------- Guards -------------------------------------------------------------- # -------- Guards --------------------------------------------------------------