Especifica o shell para o trabalho cron individual

2

Eu tenho um cron job que preciso executar como root e que precisa do bash em vez do sh shell padrão.

O root crontab tem outros trabalhos nele que funcionam bem como estão e eu prefiro não arriscar quebrá-los, especificando SHELL=/bin/bash no topo do arquivo crontab .

Como posso especificar que minha tarefa do cron seja executada usando o bash sem alterar o shell usado para outras tarefas existentes?

Estou meio que pensando que uma linha como 0 * * * * SHELL=/bin/bash myjob pode fazer o truque, mas não consigo encontrar isso mencionado em qualquer parte da documentação do CentOS para o cron.

Também achei que talvez definir a variável SHELL imediatamente antes do meu trabalho (que seria o último no arquivo) funcionasse, mas não consegui encontrar uma documentação do efeito da colocação de variáveis de ambiente e se elas foram atribuídas na ordem do documento ou foram considerados apenas globais, independentemente de sua posição (ou talvez geraram um erro, se não antes de todos os trabalhos).

É possível especificar o shell em uma base de trabalho a trabalho?

    
por scanny 15.03.2018 / 20:16

2 respostas

5

A maneira mais simples de especificar o shell é simplesmente invocar o arquivo executável desse shell. Por exemplo, se você quiser executar um comando chamado myjob usando bash , poderá usar algo como a seguinte linha de comando:

/bin/bash -c 'myjob'

A entrada correspondente do crontab pode ter esta aparência:

0 * * * * /bin/bash -c 'myjob'

Como alternativa, se myjob for um script, você poderá usar algo como a seguinte linha de comando:

/bin/bash '/path/to/myjob'

E a entrada correspondente do crontab para isso seria algo assim:

0 * * * * /bin/bash '/path/to/myjob'
    
por 15.03.2018 / 21:02
1

Se myjob for um script de shell, verifique se ele é executável e se é #! -line especifica o intérprete correto para o arquivo de script (por exemplo, #!/bin/bash ). Isso é tudo.

Se for uma série de comandos, recomendo colocar aqueles em um script bash , com uma linha #! adequada, como acima.

Dessa forma, você não precisa se preocupar muito com as particularidades de obter a entrada crontab correta (exceto em que horas executar o script). Também remove a necessidade de atualizar o cronjob quando você reimplementa o script em Python ou Perl ou alguma outra variante do shell.

    
por 13.04.2018 / 12:52