linux: como executar um comando em um determinado diretório

16

Eu simplesmente quero apenas executar um comando (na verdade, é um script de shell) de um determinado diretório como um trabalho cron. Como posso executá-lo para que ele seja definido em um determinado diretório sem usar cd.

Zumbis
fonte

Respostas:

16

Sua pergunta faz pouco sentido. Use cd. Se você pedir a resposta para não usar, cdporque você a tentou e não funcionou, provavelmente não a inseriu corretamente no crontab.

A maneira mais simples seria escrever um pequeno script de shell que executará o cd e executará sua tarefa principal e, em seguida, agendará o script.

Daenyth
fonte
1
O crontab pode me deixar colocar vários comandos em um trabalho? Caso contrário, eu teria que codificar o cd [caminho]. E o caminho pode mudar, causando problemas de implantação realmente irritantes e também descentralizando a configuração, algo que estou evitando a todo custo.
Zombies
1
@ Zombies: sim, você pode colocar vários comandos em um trabalho (por exemplo, separá-los com ponto e vírgula ou &&), mas também pode escrever um script separado que contenha todos os comandos e apenas colocar o caminho do script no cron, como sugerido por Daenyth. Seu script pode fazer algo como ler o diretório de um arquivo de configuração, se você quiser - o ponto é que, no entanto, você deseja inserir o nome do diretório em seu script, não há desculpa para não usá-lo cd.
David Z
Entendo. Vou querer usar o cd no crontab diretamente, pois se eu o escrever em um arquivo, terei que editá-lo em cada arquivo, o que facilita configurações delicadas / fáceis de quebrar.
Zombies
3
E se você colocar o CD no arquivo crontab, precisará editá-lo em cada arquivo crontab. Eu não entendo o problema. Talvez você possa explicar o que está tentando fazer de maneira mais completa.
garyjohn
E a outra razão para executar um script de shell a partir do arquivo crontab é garantir que o ambiente esteja configurado corretamente. O ambiente dado a um trabalho cron normalmente não é mínimo, portanto, você geralmente precisa redefini-lo para algo mais utilizável.
Jonathan Leffler
60

Basta especificar o caminho para o script. Não há necessidade de cd:

0 12 * * * /path/to/script args

Se o seu script procura por arquivos em ., então você vai ter que usar cd:

0 12 * * * cd /some/dir && /path/to/script args
Pausado até novo aviso.
fonte
2
Veja também serverfault.com/questions/290313/…
Will Sheppard
4
&&, como na resposta que @WillSheppard vincula, seria melhor do que ;porque &&apenas executa o próximo comando se o comando anterior tiver êxito.
Max Heiber
1
@mheiber: fixed
Pausado até novo aviso.