CiviCRM: attivare cron via cv: copertina

Ecco come fare se hai CiviCRM+Drupal.

Ipotizziamo di avere un'installazione di CiviCRM in Drupal ospitato su un server di cui abbiamo l'accesso e l'amministrazione o su un webhosting che permette di impostare cron.
Prima di passare alla descrizione esecutiva è utile fare una premessa e una descrizione più completa dell'ambiente della nostra installazione.

Premessa

CiviCRM può fare svariate operazioni programmate. Inoltre necessita di avere attiva la schedulazione per tutta una serie di funzioni interne (come svuotamenti e ri-creazioni le cache, manutenzioni sugli utenti, ecc...).
CiviCRM prevede 3 vie: chiamate web, usando cv o grub, usando cli.php.

  • Chiamate web: questa via è sempre valida, ma è quella che non vogliamo usare.
  • cli.php: se abbiamo Drupal 10 o 11 con CiviCRM 5.x o 6.x non funziona (forse un errore di porting);
  • cv o drush: drush è una command line specifica di Drupal, mentre cv (CiviCRM command) è un'utility PHP che permette la manipolazione di CiviCRM indipendentemente dal CMS che usiamo.

Usiamo l'utility cv in quanto indipendente dal CMS che usiamo.

Dobbiamo, però, installare cv perché non è di serie. Per installarlo è necessario accedere al server con diritti di amministrazione:

  • accediamo al nostro server o dalla console o via ssh;
  • scarichiamo e installiamo l'utility

sudo wget https://download.civicrm.org/cv/cv.phar -o /usr/local/bin/cv
sudo chmod +x /usr/local/bin/cv

A questo punto possiamo passare ad attivare cron .

Ambiente

Ipotizziamo il seguente ambiene in cui gira il nostro CiviCRM:

  • Drupal versione 10
  • CiviCRM 5.75
  • OS Ubuntu Server 24.02
  • PHP 8.3.6
  • URL https://www.example.com/portal
  • URI sito /var/www/example.com/html/portal
  • URI php /usr/bin/php
  • URI cv /usr/local/bin/cv
  • Utente e gruppo che fanno girare il sito www-data:www-data
  • facciamo girare il processo ogni 4 minuti.

Attivazione di cron

Se il nostro CiviCRM gira in un nostro server:

  • accediamo al server o dalla console o via ssh
  • invochiamo crontab in modalità editing

sudo crontab -e -u www-data

  • aggiungiamo, come ultima riga la seguente stringa;

*/4  *  *  *  * /usr/bin/php /usr/local/bin/cv api job.execute --user=adminora --cwd=/var/www/example.com/html/portal > /dev/null

  • usciamo dall'etitor salvando la modifica;
    NB: a questo punto dobbiamo procedere ad attiva i job dentro CiviCRM altrimento CiviCRM non eseguirà nessun job
  • tramite un browser accediamo al sito https://www.example.com/portal
  • autentichiamoci come amministratori
  • accediamo al percorso "Amministrazione -> Impostazioni di sistema -> Job Programmati"
  • abilitiamo i job che ci interessano.

NB: se vogliamo attivo l'invio automatico di mail massive e newsletter dobbiamo attivare il job "Send Scheduled Mailings (Always)", "Send Scheduled Reminders (Hourly)" e "Validate Email Address from Mailings. (Daily)" .


Appendice

3 note pratiche e utili a conclusione.

I log di cron

La stringa che abbiamo inserito in cron termina con  > /dev/null. Questo argomento manda al device nullo (=cestino) i messaggi generati da cv. Ottimo per non avere email ogni 4 minuti che riportano i log di output.
Poco utile per capire se la sintassi e la configurazione è corretta o no.
Pertanto possiamo lanciarlo manulmente per verificare l'output.
Prima di procedere se abbiamo già attivato cron disattiviamolo temporaneamente.
Dalla console del server dare il seguente comando

sudo -u www-data /usr/bin/php /usr/local/bin/cv api job.execute --user=adminora --cwd=/var/www/example.com/html/portal

Se otteniamo un output simile a quello segunte vuol dire che tutto è a posto:

{
    "is_error": 0,
    "version": 3,
    "count": 1,
    "values": 1
}

Se otteniamo qualcosa di diverso (come ad esempio il seguente output) vuol dire che c'è qualcosa da sistemare:

In BootTrait.php line 98:
  Failed to determine contactID for user=usercron 

api3 [--in IN] [--out OUT] [--flat [FLAT]] [-T|--out=table] [-I|--out=list] [-J|--out=json-pretty] [--] <Entity.action> [<key=value>...]

NB: dopo il test ricordarsi di riattivare cron !


I log in CiviCRM

Oltre ai log ottenibili dalla console del server, CiviCRM mette a disposizione una comoda pagina con messaggi più facilmente leggibili:

  • tramite un browser accediamo al sito https://www.example.com/portal
  • autentichiamoci come amministratori
  • accediamo al percorso "Amministrazione -> Impostazioni di sistema -> Job Programmati"
  • nella finestra dei job clicchiamo sul bottone "Vedi Log (tutti i job)".

 

Impostare l'SMTP in CiviCRM

Tema estraneo al cron dobbiamo però citare la configurazione dell'SMTP in CiviCRM: se questo non è correttamente configurato le mail non partiranno!
Possiamo usare la guida "Gmail per inviare email da siti web e da app".
Come indicazione di orientamento:

  • tramite un browser accediamo al sito https://www.example.com/portal
  • autentichiamoci come amministratori
  • accediamo al percorso "Amministrazione -> Impostazione di Sistema -> Email In Uscita (SMTP/Sendmail)"
  • impostiamo la scheda come segue e confermiamo cliccando sul bottone "Salva e invia email di test": 
        "Permetti email da contatto connesso": SI
        "SMTP Server": ssl://smtp.gmail.com
        "Porta SMTP": 465
        "Autenticazione": SI
        "Username SMTP": Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.
        "Password SMTP": ylbu lfos guio ycap

NB: sostituire i dati di fantasia con dati reali.


Webgrafia

Scheduled jobs (https://docs.civicrm.org/sysadmin/en/latest/setup/jobs/#ManagingScheduledJobs-Command-lineSyntaxforRunningJobs)
Setting up CiviMail Cron Job from a CLI Command Line (https://forum.civicrm.org/index.php?topic=26724.0)
Setting civicrm cronjob in drupal (https://civicrm.stackexchange.com/questions/49078/setting-civicrm-cronjob-in-drupal)
Gmail per inviare email da siti web e da app (https://www.digitaldsb.it/portal/informatica/gmail-per-inviare-email-da-siti-web-e-da-app).