Crontab - Executar no diretório

170

Gostaria de definir um trabalho para ser executado diariamente no root crontab. Mas gostaria de executá-lo a partir de um diretório específico para encontrar todos os arquivos necessários, pois o aplicativo possui vários caminhos relativos.

De qualquer forma, posso dizer ao crontab para executar em um diretório específico?

user333746
fonte

Respostas:

318

Todos os trabalhos são executados por um shell, portanto, inicie esse trecho de shell por um comando para alterar o diretório.

cd /path/to/directory && ./bin/myapp

Em relação ao uso de em &&vez de ;: normalmente não faz diferença, mas se o cdcomando falhar (por exemplo, porque o diretório não existe) com &&o aplicativo não for executado, enquanto com ;ele é executado (mas não no diretório pretendido )

Gilles 'SO- parar de ser mau'
fonte
Em vez de adicionar uma resposta quase duplicada, deixe-me acrescentar que você pode escolher qual shell (se precisar do bash em vez de sh, por exemplo) configurando SHELLno seu crontab.
Edd Steel
12
+1. a solução de qualquer outra pergunta relacionada é reescrever o script com caminhos absolutos. este é exatamente o que eu precisava
Conrad.Dean
2
Por curiosidade, você poderia usar um ponto-e-vírgula em ;vez do duplo e comercial &&ou isso não funcionaria? E porque?
21716 Joshua Pinter
32
@ JoshPinter Normalmente, isso não faz diferença. Mas se o cdcomando falhar (por exemplo, porque o diretório não existe), com &&, o aplicativo não será executado. Com ;, é executado (mas não no diretório pretendido).
Gilles 'SO- stop be evil'
1
Vou fazer isso para todas as tarefas agendadas de meus apps, você me salvou de mudar meus arquivos de origem, muito obrigado
Contador م