
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 lá está alterando o arquivo PATH
.
O que está mudando o PATH
? Por que o cron não usa isso PATH
?
Responder1
Em relação à pergunta - por que isso acontece - a página de manual que explica isso é crontab(5)
, IOW, aquela acessível através man 5 crontab
(não a padrão na seção 1). O daemon cron não tenta emular uma sessão shell, em vez disso, ele configura um ambiente limpo e mínimo para a execução dos cron jobs e, por sua vez, permite que o arquivo crontab defina 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.
Responder2
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
haverá uma série de variáveis de ambiente que /tmp/env
não possuem. Isso ocorre porque env
foi invocado em um shell de login usando bash -l
.