Esecuzione di processi Cron sulle istanze Linux - AWS OpsWorks

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Esecuzione di processi Cron sulle istanze Linux

Importante

Il AWS OpsWorks Stacks servizio ha raggiunto la fine del ciclo di vita il 26 maggio 2024 ed è stato disattivato sia per i clienti nuovi che per quelli esistenti. Consigliamo vivamente ai clienti di migrare i propri carichi di lavoro verso altre soluzioni il prima possibile. Se hai domande sulla migrazione, contatta il AWS Support Team su AWS re:post o tramite Premium AWS Support.

Un processo Cron di Linux indica al daemon Cron di eseguire uno o più comandi su una pianificazione specificata. Per esempio, supponiamo che lo stack supporti un'applicazione e-commerce PHP. È possibile impostare un processo Cron per fare in modo che il server invii un report delle vendite in un orario specificato ogni settimana. Per ulteriori informazioni su Cron, consulta cron su Wikipedia. Per ulteriori informazioni su come eseguire un processo Cron direttamente su un computer basato su Linux o su un'istanza, consulta l’argomento che spiega che cosa sono Cron e Crontab e come si utilizzano sul sito Web delle conoscenze di base dell'Università dell'Indiana.

Anche se è possibile impostare manualmente i processi cron sulle istanze singole basate su Linux collegandosi a esse con SSH e modificando le loro voci crontab, uno dei principali vantaggi di AWS OpsWorks Stacks è che è possibile indicargli di eseguire l'attività su un intero livello di istanze. La procedura seguente descrive come configurare un cron lavoro sulle istanze di un livello di PHP App Server, ma è possibile utilizzare lo stesso approccio con qualsiasi livello.

Per configurare un processo cron sulle istanze di un livello
  1. Implementare un libro di ricette con una ricetta con una risorsa cron che imposta il processo. L'esempio presuppone che la ricetta sia denominata cronjob.rb; i dettagli di implementazione vengono descritti in seguito. Per ulteriori informazioni sui libri di ricette e sulle ricette, consulta Libri di ricette e ricette.

  2. Installare il libro di ricette sullo stack. Per ulteriori informazioni, consulta Installazione di libri di ricette personalizzati.

  3. Fai in modo che AWS OpsWorks Stacks esegua automaticamente la ricetta sulle istanze del layer assegnandola ai seguenti eventi del ciclo di vita. Per ulteriori informazioni, consulta Esecuzione automatica di ricette.

    • Configurazione: l'assegnazione cronjob.rb a questo evento indica a AWS OpsWorks Stacks di eseguire la ricetta su tutte le nuove istanze.

    • Distribuisci: l'assegnazione cronjob.rb a questo evento indica a AWS OpsWorks Stacks di eseguire la ricetta su tutte le istanze online quando distribuisci o ridistribuisci un'app sul layer.

    È anche possibile eseguire manualmente la ricetta sulle istanze online utilizzando il comando stack Execute Recipes. Per ulteriori informazioni, consulta Esecuzione dei comandi dello stack.

Di seguito è riportato l'esempio cronjob.rb, che imposta un processo Cron per eseguire un'applicazione PHP implementata dall'utente una volta a settimana, la quale raccoglie i dati di vendita dal server e invia un report per email. Per ulteriori esempi di come utilizzare una risorsa Cron, consulta cron.

cron "job_name" do hour "1" minute "10" weekday "6" command "cd /srv/www/myapp/current && php .lib/mailing.php" end

cron è una risorsa Chef che rappresenta un processo cron. Quando AWS OpsWorks Stacks esegue la ricetta su un'istanza, il provider associato gestisce i dettagli della configurazione del lavoro.

  • job_name è un nome definito dall'utente per il processo cron, come per esempio weekly report.

  • hour/minute/weekday specificano quando i comandi devono essere eseguiti. Questo esempio esegue i comandi ogni sabato alle 01:10.

  • command specifica i comandi da eseguire.

    Questo esempio esegue due comandi. Il primo passa alla directory /srv/www/myapp/current. Il secondo esegue l'applicazione mailing.php implementata dall'utente, che raccoglie i dati di vendita e invia il report.

Nota

Il comando bundle non funziona con i processi cron per impostazione predefinita. Il motivo è che AWS OpsWorks Stacks installa bundler nella directory. /usr/local/bin Per utilizzare bundle con un processo cron, bisogna aggiungere esplicitamente il percorso /usr/local/bin al processo Cron. Inoltre, poiché la variabile di ambiente $PATH potrebbe non espandersi nel processo cron, una best practice è quella di aggiungere esplicitamente qualsiasi informazione sul percorso necessaria al processo senza dover ricorrere all'espansione della variabile $PATH. Gli esempi seguenti mostrano due modi per utilizzare bundle in un processo cron.

cron "my first task" do path "/usr/local/bin" minute "*/10" command "cd /srv/www/myapp/current && bundle exec my_command" end
cron_env = {"PATH" => "/usr/local/bin"} cron "my second task" do environment cron_env minute "*/10" command "cd /srv/www/myapp/current && /usr/local/bin/bundle exec my_command" end

Se lo stack ha più server di applicazioni, l'assegnazione degli eventi del ciclo cronjob.rb di vita del livello PHP App Server potrebbe non essere l'approccio ideale. Per esempio, la ricetta viene eseguita su tutte le istanze del livello, quindi verranno ricevuti più report. Un approccio migliore è quello di utilizzare un livello personalizzato per assicurare che solo un server invii un report.

Per eseguire una ricetta solo su una delle istanze di un livello
  1. Creare un livello personalizzato denominato, per esempio, PHPAdmin e assegnare cronjob.rb ai suoi eventi Configurazione e Distribuzione. I livelli personalizzati non devono necessariamente fare molto. In questo caso, PHPAdmin esegue solo una ricetta personalizzata sulle sue istanze.

  2. Assegna una delle istanze di PHP App Server a. AdminLayer Se un'istanza appartiene a più di un livello, AWS OpsWorks Stacks esegue le ricette integrate e personalizzate di ogni livello.

Poiché solo un'istanza appartiene ai livelli PHP App Server e phpAdmin, cronjob.rb viene eseguita solo su quell'istanza e si riceve un solo rapporto.