O Cron leva o diretório inicial ~
de onde /etc/nsswitch.conf
diz para obter as informações do usuário. Isso será mostrado com getent passwd <username>
$HOME
não é o mesmo que ~
Nós executamos um grande ambiente de computação Linux distribuído, no qual o diretório pessoal de um usuário pode ser movido entre diferentes repositórios de back-end, devido à sua afiliação e distribuição geral entre diferentes servidores de arquivos. Como resultado disso, seu diretório pode ser alterado de algo como / fileserver1 / joeuser para / fileserver3 / joeuser.
Depois de passar pelos processos de copiar os arquivos, sethome
é usado para definir seu diretório inicial. Depois de um logout / login, suas variáveis $ HOME e ~ estão apontando para o novo caminho e tudo está indo como deveria.
Cron, no entanto, parece ainda pensar que ~ refere-se ao seu diretório home antigo e falhará ao construir um caminho usando essas informações desatualizadas.
Suspeitamos que isso se deva a algum tipo de cache interno de diretório na memória em nome do daemon do cron.
Por vários motivos, gostaríamos de evitar a reinicialização do crond regularmente e preferimos nos referir a ~ para que eles possam construir caminhos em seus crontabs.
Alguma outra solução, ou insights sobre esse comportamento?
O Cron leva o diretório inicial ~
de onde /etc/nsswitch.conf
diz para obter as informações do usuário. Isso será mostrado com getent passwd <username>
$HOME
não é o mesmo que ~
Qualquer cache desse tipo provavelmente seria feito pelo daemon nscd
do Linux. Reinicie-o para limpar o cache.
O daemon do cron não possui código para armazenar em cache itens como diretórios montados automaticamente e não retém nenhum conteúdo das variáveis do sistema pela pessoa que editou a tabela cron.