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
parent
871d69cc2d
commit
996c9c19fe
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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 --------------------------------------------------------------
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue