Gestire un server senza automazione è come guidare con il freno a mano tirato: si va avanti, ma con uno sforzo inutile e continui rischi. Nel corso degli anni ho imparato che la configurazione dei cronjob su Plesk è uno dei primi passi che faccio appena metto in piedi un nuovo server. Automatizzare backup, pulizia dei log, manutenzione dei database e controlli di sicurezza non è un lusso — è una necessità per qualsiasi sysadmin serio.
In questa guida vi mostro come configuro i cronjob su Plesk Obsidian nel dettaglio, partendo dall’interfaccia grafica fino agli script personalizzati via CLI. Se gestite server con Plesk, troverete procedure testate e funzionanti che potete applicare immediatamente sui vostri ambienti di produzione.
Se avete già configurato i backup remoti su Plesk con storage S3 compatibile come Wasabi, i cronjob vi permetteranno di portare l’automazione al livello successivo, integrando operazioni di manutenzione che Plesk da solo non gestisce.
Cosa Sono i Cronjob su Plesk e Perché Servono
I cronjob (o scheduled tasks) sono operazioni pianificate che il server esegue automaticamente a intervalli definiti. Su Plesk Obsidian, la gestione dei cronjob è integrata nell’interfaccia e accessibile sia a livello di singolo dominio che a livello server.
Nella mia esperienza quotidiana, utilizzo i cronjob per:
- Backup automatici di file, database e configurazioni
- Pulizia dei file temporanei e dei log obsoleti
- Manutenzione dei database (ottimizzazione tabelle MySQL/MariaDB)
- Monitoraggio dello spazio disco e alert via email
- Aggiornamento automatico dei certificati SSL e cache
- Esecuzione di script PHP per attività WordPress (wp-cron)
Come Creare un Cronjob su Plesk: Procedura dall’Interfaccia Grafica
La creazione di un cronjob tramite l’interfaccia di Plesk è piuttosto intuitiva. Vi mostro la procedura passo dopo passo:
Step 1: Accedere alla Sezione Scheduled Tasks
Accedete al pannello Plesk e navigate verso Tools & Settings > Scheduled Tasks (Cron jobs) nella sezione “Tools & Resources”. Da qui potrete vedere tutti i task schedulati, sia quelli a livello server che quelli per singola sottoscrizione.
In alternativa, per cronjob legati a un dominio specifico, potete accedere da Domains > nomedominio.com > Scheduled Tasks.
Step 2: Aggiungere un Nuovo Task
Cliccate su Add Task e scegliete il tipo di operazione. Plesk offre tre modalità principali:
- Run a Command: esegue un comando shell o uno script. Specificate il percorso completo all’eseguibile.
- Fetch a URL: accede a un URL specificato (senza bisogno di curl o wget).
- Run a PHP Script: esegue uno script PHP specificando percorso e versione PHP.
Step 3: Configurare la Schedulazione
Selezionate la frequenza di esecuzione. Potete usare le opzioni predefinite (ogni ora, giornaliero, settimanale, mensile) oppure passare alla modalità Cron style per un controllo granulare tramite la sintassi crontab standard:
* * * * * | | | | | | | | | +-- Giorno della settimana (0-7, dove 0 e 7 = Domenica) | | | +-------- Mese (1-12) | | +-------------- Giorno del mese (1-31) | +-------------------- Ora (0-23) +-------------------------- Minuto (0-59)
Consiglio pratico: non schedulate mai i cronjob a orari “tondi” come le :00. Nella mia esperienza, molti task di sistema e di altri utenti partono esattamente all’ora piena, causando picchi di carico. Preferisco orari come 03:07 o 02:33 per distribuire meglio il carico.
Step 4: Test Immediato
Prima di salvare, Plesk offre l’opzione Run Now per eseguire un test immediato. Ve lo consiglio sempre: se il task termina con errore in fase di test, fallirà anche durante l’esecuzione schedulata.
Configurazione della Shell per i Cronjob su Plesk
Un aspetto che all’inizio mi creava problemi era la questione della shell chrooted. Su Plesk per Linux, i cronjob degli utenti vengono eseguiti di default in una shell chrooted (/bin/bash (chrooted)), il che significa che il filesystem root viene cambiato nella home directory dell’utente di sistema della sottoscrizione.
Questo migliora la sicurezza ma limita le operazioni possibili. Se avete bisogno che un cronjob acceda a percorsi fuori dalla webspace, dovete modificare la shell:
- Andate in Tools & Settings > Scheduled Tasks > Settings
- Selezionate la shell desiderata (es.
/bin/bashnon chrooted)
In alternativa, via SSH:
plesk bin server_pref -u -crontab-secure-shell "/bin/bash"
Attenzione: su server condivisi, lasciate la shell chrooted come default. Modificatela solo per sottoscrizioni specifiche che ne hanno reale necessità. Concedere accesso non chrooted significa dare la possibilità di accedere a file e dati che non appartengono a quell’utente.
Cronjob per Backup Automatici su Plesk
Ecco la parte più importante: automatizzare i backup. Vi mostro diverse soluzioni che ho implementato e che uso quotidianamente. Se volete approfondire come configurare anche lo storage remoto, vi rimando al mio articolo su come configurare i backup remoti S3 con Wasabi su Plesk.
Backup Completo del Server via CLI
Il comando pleskbackup è lo strumento CLI nativo di Plesk per i backup. Per creare un backup completo del server:
# Backup completo del server Plesk con output verboso plesk bin pleskbackup server -v
I backup vengono salvati di default nella directory /var/lib/psa/dumps. Assicuratevi sempre che ci sia spazio sufficiente prima di schedulare backup automatici, soprattutto con installazioni di grandi dimensioni.
Backup di un Singolo Dominio
# Backup completo di un dominio specifico plesk bin pleskbackup --domains-name esempio.com -v # Solo file di hosting (senza email) plesk bin pleskbackup --domains-name esempio.com --only-hosting -v # Solo email plesk bin pleskbackup --domains-name esempio.com --only-mail -v
Backup WordPress con WP Toolkit
Se usate il WP Toolkit di Plesk (e dovreste), potete automatizzare il backup delle installazioni WordPress:
# Trovare l'instance-id delle installazioni WordPress plesk ext wp-toolkit --list # Backup di una specifica istanza WordPress plesk ext wp-toolkit --backup -instance-id 1 -path /httpdocs -operation backup
Nota importante: questo comando deve essere eseguito come utente root. Quando create il cronjob in Plesk, assicuratevi di selezionare l’utente root nel campo “Run this task”.
Backup Database MySQL/MariaDB Personalizzato
A volte preferisco avere dump separati dei database, soprattutto per siti WordPress critici:
# Dump di un database specifico con data nel nome file MYSQL_PWD=$(cat /etc/psa/.psa.shadow) mysqldump -u admin NOME_DATABASE > /var/www/vhosts/esempio.com/backup/db_$(date +%Y%m%d).sql # Comprimere il dump gzip /var/www/vhosts/esempio.com/backup/db_$(date +%Y%m%d).sql
Script di Backup Completo Schedulato
Ecco lo script che uso sui miei server. Lo salvo in /root/scripts/backup-notturno.sh:
#!/bin/bash
# Script backup notturno - Dario Iannascoli
# Eseguire come root tramite cronjob Plesk
DATA=$(date +%Y%m%d)
BACKUP_DIR="/backup/nightly"
LOG_FILE="/var/log/backup-notturno.log"
EMAIL="admin@esempio.com"
# Crea directory se non esiste
mkdir -p $BACKUP_DIR
echo "=== Backup iniziato: $(date) ===" >> $LOG_FILE
# Backup server completo Plesk
plesk bin pleskbackup server --output-file=$BACKUP_DIR/server-$DATA.tar -v >> $LOG_FILE 2>&1
# Verifica esito
if [ $? -eq 0 ]; then
echo "Backup completato con successo" >> $LOG_FILE
else
echo "ERRORE nel backup!" >> $LOG_FILE
echo "Errore backup server $(hostname) del $DATA" | mail -s "ALERT: Backup fallito" $EMAIL
fi
# Pulizia backup più vecchi di 7 giorni
find $BACKUP_DIR -mtime +7 -exec rm {} ;
echo "=== Backup terminato: $(date) ===" >> $LOG_FILE
Rendetelo eseguibile e schedulatelo:
chmod +x /root/scripts/backup-notturno.sh
Poi create il cronjob in Plesk con sintassi cron: 7 3 * * * (ogni notte alle 03:07) con comando /root/scripts/backup-notturno.sh.
Cronjob per la Manutenzione del Server Plesk
Oltre ai backup, uso diversi cronjob per mantenere il server in salute. Questa è la parte che fa la differenza tra un server che “sopravvive” e uno che funziona al meglio per mesi.
Pulizia Automatica dello Spazio Disco
# Pulizia file temporanei più vecchi di 3 giorni find /tmp -type f -mtime +3 -delete 2>/dev/null # Pulizia vecchi log compressi più vecchi di 30 giorni find /var/log -name "*.gz" -mtime +30 -delete 2>/dev/null # Pulizia cache Plesk find /var/lib/psa/dumps -name "*.tar" -mtime +14 -delete 2>/dev/null
Schedulo questo ogni notte alle 04:15 con sintassi cron: 15 4 * * *.
Ottimizzazione Database MySQL/MariaDB
# Ottimizzazione di tutti i database MYSQL_PWD=$(cat /etc/psa/.psa.shadow) mysqlcheck -u admin --all-databases --optimize --auto-repair 2>/dev/null
Questo lo eseguo una volta a settimana, la domenica notte alle 04:30: 30 4 * * 0.
Monitoraggio Spazio Disco con Alert Email
#!/bin/bash
# Controlla lo spazio disco e invia alert se sotto il 15%
USO=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if [ $USO -gt 85 ]; then
echo "ATTENZIONE: Spazio disco al ${USO}% su $(hostname)" | mail -s "ALERT DISCO $(hostname)" admin@esempio.com
fi
Lo schedulo ogni 6 ore: 0 */6 * * *.
Forzare la Rotazione dei Log Più Frequentemente
Plesk esegue la rotazione dei log una volta al giorno durante il Daily Maintenance script. Se gestite siti ad alto traffico e i log crescono troppo rapidamente, potete aggiungere una rotazione extra:
# Rotazione log aggiuntiva /usr/local/psa/bin/sw-engine-pleskrun /usr/local/psa/admin/plib/DailyMaintainance/script.php -f ExecuteStatistics
Attenzione: questa operazione può aumentare il consumo di risorse, specialmente su server con molti domini. Usatela con criterio.
Gestione Automatica del WP-Cron
Un trucco che applico sempre su tutti i siti WordPress in Plesk è disabilitare il wp-cron integrato (che si attiva ad ogni visita, causando rallentamenti) e sostituirlo con un vero cronjob:
Prima, nel file wp-config.php del sito WordPress aggiungete:
define('DISABLE_WP_CRON', true);
Poi create un cronjob Plesk di tipo “Fetch a URL” con l’URL:
https://vostrosito.com/wp-cron.php?doing_wp_cron
Schedulatelo ogni 15 minuti: */15 * * * *. Questo migliora drasticamente le prestazioni del sito. Se state configurando un nuovo sito WordPress, questa ottimizzazione fa parte della mia procedura di configurazione post-installazione.
Best Practice e Troubleshooting dei Cronjob su Plesk
Nel corso degli anni ho accumulato parecchia esperienza con i problemi dei cronjob. Ecco le best practice che seguo sempre:
Gestione degli Errori e Notifiche
- Abilitate sempre le notifiche email per i task critici: in Plesk potete specificare un indirizzo email a cui ricevere l’output del cronjob
- Redirect dell’output: usate
>> /var/log/mio-script.log 2>&1per loggare sia stdout che stderr - Se non volete ricevere email per task non critici, aggiungete
>/dev/null 2>&1alla fine del comando
Errori Comuni che Ho Incontrato
Permission denied: è il problema più frequente. Spesso dipende dalla shell chrooted che non trova il binario PHP o non ha accesso al percorso dello script. La soluzione è cambiare la shell della sottoscrizione in /bin/bash (non chrooted) da Subscriptions > nomedominio.com > Web Hosting Settings > Access to the server over SSH.
Comando non trovato: quando usate “Run a Command”, specificate sempre il percorso completo dell’eseguibile. Ad esempio, non scrivete php ma /opt/plesk/php/8.2/bin/php.
Task che funziona manualmente ma non da cron: questo capita spesso perché l’ambiente del cronjob è diverso dalla sessione SSH interattiva. Assicuratevi che tutte le variabili d’ambiente necessarie siano impostate nello script.
Sicurezza dei Cronjob
I cronjob possono essere un vettore di attacco se non gestiti correttamente. Vi consiglio di:
- Tenere la shell chrooted come default su server condivisi
- Monitorare regolarmente i cronjob attivi di tutti gli utenti
- Se sospettate attività malevole, potete disabilitare tutti i cronjob “Run a command” impostando la shell a
/bin/false:plesk bin server_pref -u -crontab-secure-shell "/bin/false" - Proteggere i backup con password tramite la variabile d’ambiente
PLESK_BACKUP_PASSWORD
Per una protezione completa del vostro server, vi consiglio anche di configurare Fail2Ban su Plesk e mettere in sicurezza WordPress dagli attacchi brute force.
Riepilogo dei Miei Cronjob Essenziali su Plesk
Ecco una tabella riassuntiva dei cronjob che configuro su ogni server Plesk che gestisco:
- 03:07 — Backup notturno completo (giornaliero)
- 04:15 — Pulizia file temporanei e log (giornaliero)
- 04:30 domenica — Ottimizzazione database MySQL (settimanale)
- Ogni 6 ore — Monitoraggio spazio disco (4 volte al giorno)
- Ogni 15 minuti — WP-Cron per ogni sito WordPress
- 01:00 domenica — Pulizia backup vecchi oltre 14 giorni (settimanale)
FAQ
Quanti cronjob posso creare su Plesk?
Non c’è un limite rigido imposto da Plesk al numero di cronjob. Il limite pratico dipende dalle risorse del server. Nella mia esperienza, su un VPS medio gestisco tranquillamente 20-30 cronjob senza problemi, a patto di distribuire bene gli orari di esecuzione per evitare picchi di carico simultanei.
Perché il mio cronjob su Plesk dà errore “Permission denied”?
Nella maggior parte dei casi, l’errore dipende dalla shell chrooted configurata di default su Plesk per Linux. I cronjob degli utenti hanno accesso limitato alla sola webspace della sottoscrizione. Per risolverlo, cambiate la shell dell’utente in /bin/bash (non chrooted) dalle impostazioni di hosting della sottoscrizione, oppure eseguite il task come utente root se si tratta di operazioni a livello server.
Posso usare i cronjob di Plesk per i backup al posto del Backup Manager integrato?
Sì, e in molti scenari lo consiglio. Il Backup Manager di Plesk permette di schedulare solo un backup automatico con opzioni limitate (orario, giornaliero, settimanale, mensile). Con i cronjob e il comando pleskbackup via CLI avete un controllo molto più granulare: potete creare backup multipli con strategie diverse, inviarli a storage diversi e integrare logica personalizzata come la rotazione automatica dei file di backup.
È meglio usare la sintassi semplificata o il “Cron style” su Plesk?
Per task semplici (ogni giorno, ogni ora) la modalità semplificata va benissimo. Per qualsiasi cosa più specifica — come eseguire un task ogni 15 minuti, o solo nei giorni feriali, o due volte al giorno a orari precisi — usate il Cron style. La sintassi crontab standard vi dà il pieno controllo sulla schedulazione. Potete usare strumenti online come crontab.guru per verificare la vostra espressione cron prima di applicarla.
Come verifico se un cronjob si è eseguito correttamente su Plesk?
Ci sono diversi modi: dalla GUI di Plesk potete vedere lo stato dell’ultimo run di ogni task. Per un’analisi più approfondita, controllate il file /var/log/cron (su CentOS/AlmaLinux) o /var/log/syslog (su Debian/Ubuntu). Inoltre, il file /var/log/plesk/task-manager.log registra tutte le attività dei task Plesk. Vi consiglio sempre di aggiungere un redirect dell’output a un file di log dedicato nei vostri script, così da avere un riscontro immediato in caso di problemi.
Conclusione
La configurazione dei cronjob su Plesk è una competenza fondamentale per qualsiasi amministratore di sistema. Automatizzare backup, manutenzione e monitoraggio non solo vi fa risparmiare ore di lavoro manuale, ma protegge i vostri dati e quelli dei vostri clienti da perdite accidentali.
Nella mia esperienza, un server ben automatizzato è un server che vi fa dormire sonni tranquilli. Partite dai cronjob essenziali che vi ho mostrato — backup notturno, pulizia disco, ottimizzazione database — e poi personalizzate in base alle vostre esigenze.
Se gestite anche la parte email del server, potrebbe interessarvi la mia guida su come sbloccare le email in coda Postfix su Plesk, un’altra operazione che si presta bene all’automazione via cronjob.
Avete domande o volete condividere i vostri cronjob essenziali? Lasciate un commento qui sotto, mi fa sempre piacere confrontarmi con altri sysadmin!