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 il 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 Squadra su AWS Re:post o tramite AWS Supporto Premium.

Un processo Cron di Linux indica al daemon Cron di eseguire uno o più comandi su una pianificazione specificata. Ad esempio, supponiamo che il tuo stack supporti un'applicazione di PHP e-commerce. È 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.

Sebbene sia possibile impostare manualmente i cron lavori su singole istanze basate su Linux collegandosi a esse e modificando le relative vociSSH, un vantaggio fondamentale di crontab AWS OpsWorks Stacks è che puoi indirizzarlo per eseguire l'operazione 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. Avere AWS OpsWorks Gli stack eseguono automaticamente la ricetta sulle istanze del layer assegnandola ai seguenti eventi del ciclo di vita. Per ulteriori informazioni, consulta Esecuzione automatica di ricette.

    • Configurazione: assegnazione a questo indirizzo di eventi cronjob.rb AWS OpsWorks Stack per eseguire la ricetta su tutte le nuove istanze.

    • Deploy: assegnazione cronjob.rb di indirizzi a questo evento AWS OpsWorks Stack per 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.

L'esempio seguente è l'cronjob.rbesempio, che configura un cron job per eseguire un'PHPapplicazione implementata dall'utente una volta alla settimana che raccoglie i dati di vendita dal server e invia un rapporto per posta. 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 il 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 PATH ambiente $ potrebbe non espandersi nel cron job, è consigliabile aggiungere esplicitamente tutte le informazioni necessarie sul percorso al job senza fare affidamento sull'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 dispone di più server di applicazioni, l'assegnazione cronjob.rb degli eventi del ciclo 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. Crea un layer personalizzato chiamato, ad esempio, PHPAdmin e assegnalo cronjob.rb agli eventi Setup and Deploy. I livelli personalizzati non devono necessariamente fare molto. In questo caso, esegue PHPAdmin solo una ricetta personalizzata sulle relative istanze.

  2. Assegna una delle istanze dell'PHPApp 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 all'PHPApp Server e ai PHPAdmin livelli, cronjob.rb viene eseguita solo su quell'istanza e si riceve un solo rapporto.