Lança 2 processos de aipo via cron

1

Estou tentando encadear alguns comandos para verificar / iniciar periodicamente dois processos por meio de cron (estou em um host compartilhado, não consigo alterar as coisas). Depois de muita pesquisa, todas as coisas que fiz não funcionam corretamente:

Tentando lançá-los separadamente em duas tarefas cron cascatas e esmaga o servidor (talvez porque o comando grep não consiga capturar as palavras de pesquisa porque elas são parâmetros, não entendo):

ps -fu $USER | grep celeryd >/dev/null || $HOME/python27/bin/python $HOME/utilities/manage.py celeryd -E -B --concurrency=1
ps -fu $USER | grep celerycam >/dev/null || $HOME/python27/bin/python $HOME/utilities/manage.py celerycam

E essas outras variantes em que tento iniciar os processos juntos no mesmo cron , iniciam somente o primeiro processo:

ps -u $USER | grep python >/dev/null || $HOME/python27/bin/python $HOME/utilities/manage.py celeryd -E -B --concurrency=1 & $HOME/python27/bin/python $HOME/utilities/manage.py celerycam &

ps -u $USER | grep python >/dev/null || ( $HOME/python27/bin/python $HOME/utilities/manage.py celeryd -E -B --concurrency=1 & $HOME/python27/bin/python $HOME/utilities/manage.py celerycam; )

ps -u $USER | grep python >/dev/null || ( $HOME/python27/bin/python $HOME/utilities/manage.py celeryd -E -B --concurrency=1; ) sleep 30s; ( $HOME/python27/bin/python $HOME/utilities/manage.py celerycam; )

Eu desisti de tentar usar o grep e aproveitei a opção --pidfile do celery worker ; celerycam não permite várias instâncias, por isso não preciso de grep para verificar:

$HOME/python27/bin/python $HOME/utilities/manage.py celery worker -E -B --concurrency=1 --pidfile=worker.pid
$HOME/python27/bin/python $HOME/utilities/manage.py celerycam
    
por symbiotech 06.08.2013 / 21:19

1 resposta

3

$USER não está definido na maioria dos crons. Felizmente, ps -u sem um nome de usuário é padronizado para o usuário atual (que é o usuário do qual o cron está sendo executado). No entanto, o seu grep tem uma grande chance de combinar com o grep , bem como com os processos de aipo. Você pode limpar esse problema com um grep '[c]elery' dissimulado. Isso corresponderá a processos com nomes / argumentos que contêm apenas aipo (e não o grep que possui argumento [c] elery). A outra questão que vejo é que, como você executa o programa com um caminho gigante para manage.py, pode estar faltando a parte "aipo" na sua saída ps . Isso pode ser solucionado adicionando mais verbosidade à saída de ps com o -w flag (quanto mais deles houver, mais detalhado ele se torna). Então, a correção sugerida é:

ps fwwwu | grep '[c]eleryd' >/dev/null || $HOME/python27/bin/python $HOME/utilities/manage.py celeryd -E -B --concurrency=1
ps fwwwu  | grep '[c]elerycam' >/dev/null || $HOME/python27/bin/python $HOME/utilities/manage.py celerycam

EDITAR: Removeu o traço estranho dos argumentos ps acima e adicionou pgrep como uma alternativa viável.

Como alternativa, você também pode usar outros dois comandos pidof e pgrep para obter os IDs do processo dos processos em execução. Eu acho que neste caso (se seu nome de usuário é fred) você pode substituir o comando ps por:

pgrep -fu fred celeryd

para alcançar resultados semelhantes.

EDIT 2: Adicione aspas simples ao redor de '[c] elery' para parar o globbing do shell (o diretório do qual o cron é executado (os usuários $ HOME) pode conter um arquivo chamado aipo .

    
por 06.08.2013 / 21:52

Tags