Como definir o cron PATH globalmente (ou seja, para todos os usuários) permanentemente?

10

Precisamos ter / usr / local / bin no caminho do cron para todos os usuários. Existe uma maneira de configurá-lo em todo o sistema, sem a necessidade de editar o crontab de cada usuário individual?

Tentamos adicionar PATH ao / etc / crontab:

# grep PATH /etc/crontab
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

Mas quando os usuários têm isso em seu crontab:

$ crontab -l | grep PATH
* * * * * echo $PATH > /tmp/current_cron_path

... revela que o caminho deles ainda está definido como padrão:

$ cat /tmp/current_cron_path
/usr/bin:/bin
mais grosseiro
fonte
2
Dica geral: escrever "não funcionou" geralmente não fornece uma resposta útil. Sempre descreva exatamente como isso não funcionou, ou seja, exatamente o que você fez e qual foi exatamente o resultado.
sleske

Respostas:

4

Você pode configurar seu PATH no arquivo de configuração crontab, como mostrado no primeiro código, exceto lá . Primeiro especifique as variáveis ​​env, depois especifique os trabalhos.

UPD: Devido ao fato de o link estar quebrado, aqui está um trecho:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
igorp1024
fonte
11
não funciona no Ubuntu, mesmo depois de reiniciar o cron
Grosser
11
@ Grosser: Bem, deveria. Poste seu crontab completo (edite sua resposta), juntamente com a saída produzida e por que você acredita que não funciona. Então vamos ver ...
sleske
Observe também que o formato das linhas de valor VARIABLE = é um pouco mais restrito do que em um script shell: Cada atribuição deve estar em uma linha própria e você não pode usar variáveis ​​no lado direito (por exemplo, PATH = $ CAMINHO: / bla não funciona).
sleske
Eu atualizei a pergunta, definindo o PATH em um crontab individual funcionou, apenas a mudança global não funcionou
mais bruta
Tente especificar variáveis ​​PATH em cada crontab onde você precisar. Provavelmente, isso foi feito devido a problemas de segurança. BTW, no ubuntu (verifiquei) PATH é definido em / etc / crontab e /etc/cron.d/anacron no ubuntu. Portanto, parece que ele não está sendo herdado do / etc / crontab. Tente defini-lo no crontab ( sudo crontab -e) do root ( )
igorp1024
3

Definir a variável PATH deve funcionar no Ubuntu, como você diz que não está funcionando?

Consulte # 14: Linux Crontab: 15 exemplos impressionantes de tarefas do Cron

o geek
fonte
Eu atualizei a pergunta, definindo o PATH em um crontab individual funcionou, apenas a mudança global não funcionou
mais bruta
1

Também não consegui encontrar uma solução para isso. O mais próximo que cheguei de uma solução decente é o seguinte (extraído de https://raymii.org/s/tutorials/Better_cron_env_and_shell_control_with_the_SHELL_variale.html ).

  • Altere o shell do seu trabalho cron e aponte-o para um script bash. Ou seja, na parte superior do cronjob, adicione: SHELL=/path/to/setup/cron.bash
  • Nesse script de shell, carregue variáveis ​​de ambiente e especifique outros vars. Certifique-se de incluir as 4 linhas a seguir na parte superior. Ele redefine a variável SHELL para bash e executa um shell bash para executar os cronjobs.

Por exemplo:

#!/bin/bash
set -e

source /etc/environment
source /etc/profile
# restore SHELL env var for cron
SHELL=/bin/bash

# execute the cron command in an actual shell
exec /bin/bash --norc "$@"

Desvantagem: isso exige que você especifique SHELL=...no topo de cada cronjob. De cabeça para baixo: você usará variáveis ​​de ambiente regulares e não precisará se preocupar em manter as variáveis ​​consistentes entre o cron e outros

Laurens Rietveld
fonte
0

Se você é capaz de ser root, pode tentar editar /etc/init.d/crone alterar o CAMINHO lá? Eu não testei isso, mas seria interessante verificar.

Rich Homolka
fonte
não parecia trabalho, eu apenas adicionei PATH = xxx em /etc/init.d/cron mas a * * * * * echo $ PATH saída era o mesmo
Grosser