$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 .