Por que o cron ENV é diferente do ENV do usuário?

3

Em uma nova instalação do Ubuntu, o usuário PATH é:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Mas no ambiente cron do mesmo usuário, é:

/usr/bin:/bin

Eu olhei para todos os arquivos de ponto do usuário no diretório inicial, nada aqui está mudando o PATH .

O que está mudando o PATH ? Por que o cron não usa esse PATH ?

    
por John Bachir 12.06.2015 / 14:53

2 respostas

3

Com relação à pergunta - por que isso acontece - a página de manual que explica é crontab(5) , IOW a que pode ser acessada através de man 5 crontab (não a padrão na seção 1). O daemon do cron não tenta emular uma sessão de shell, em vez disso, configura um ambiente limpo e mínimo para que as tarefas do cron sejam executadas e, por sua vez, permite que o arquivo crontab configure suas próprias variáveis de ambiente arbitrárias. O daemon cron mais recente fornecido com o Debian também possui várias provisões adicionais para pam_env etc.

    
por 12.06.2015 / 18:04
2

O Cron não executa processos em um shell de login. Por causa disso, todos os scripts típicos não são originados quando um processo é executado.

A execução do processo a partir de um shell de login deve replicar o ambiente do usuário.

Coloque algo assim em um crontab e compare as duas saídas:

*/1 * * * * /usr/bin/env > /tmp/env                                             
*/1 * * * * /usr/bin/bash -l -c /usr/bin/env > /tmp/bashenv  

Como você pode ver, /tmp/bashenv terá uma enorme quantidade de variáveis de ambiente que /tmp/env não possui. Isso ocorre porque env foi chamado em um shell de login usando bash -l .

    
por 12.06.2015 / 16:09

Tags