Minha entrada crontab não consegue localizar scripts no diretório pessoal do meu usuário. As entradas crontab são executadas exatamente na programação, conforme especificado, e, ocasionalmente, o script é executado corretamente, mas na maioria das vezes, ele produz apenas uma saída assim:
/bin/sh: 1: /home/<user>/script/check_cgi.pl: not found
A entrada do crontab para isso é:
5,35 * * * * /home/<user>/scripts/check_cgi.pl >>/tmp/check_cgi.pl.out 2>&1
Eu verifiquei que o script existe e que o root pode ver o sistema de arquivos e que o comando é executado corretamente se eu sudo para root.
Alguém tem alguma sugestão sobre o motivo pelo qual o cron frequentemente não conseguiria encontrar um arquivo e como resolvê-lo?
EDITAR
Este é o crontab do root (editado pelo sudo crontab -e), daí a relevância de verificar se o root pode ver o script.
As permissões no script são:
-rwxrwxr-x 1 <user> <user> 700 Apr 20 09:27 check_cgi.pl
e as permissões de diretório 775 ou 755 também, então não há problema com o root ter permissões para executar o script.
Parece que o cron começou a "encontrar" o script depois que eu adicionei um novo trabalho cron para executar "find /"; como se forçar o cron a percorrer toda a árvore de diretórios permitisse "encontrar" o script novamente.
Existem 4 scripts, todos contidos no mesmo diretório. Eles correm em vários momentos (a cada 15 minutos, a cada 30 minutos, uma vez por dia) e todos eles têm esse problema ao mesmo tempo. E quando o problema acontece, todos funcionam bem.
EDIT 2
Eu encontrei o problema ... Ao executar cada hora a tarefa cron "ll -lR / home", descobri que por volta das 15.00 começou a reportar incorretamente o conteúdo do diretório / home /. Em vez da coleção correta de diretórios (incluindo o diretório de scripts necessários), ele mostrava o conteúdo completamente diferente:
lrwxrwxrwx 1 <user> <user> 56 Jan 18 20:53 Access-Your-Private-Data.desktop -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.desktop
lrwxrwxrwx 1 <user> <user> 52 Jan 18 20:53 README.txt -> /usr/share/ecryptfs-utils/ecryptfs-mount-private.txt
E quando vejo o arquivo /usr/share/ecryptfs-utils/ecryptfs-mount-private.txt, ele me diz:
THIS DIRECTORY HAS BEEN UNMOUNTED TO PROTECT YOUR DATA.
From the graphical desktop, click on:
"Access Your Private Data"
or
From the command line, run:
ecryptfs-mount-private
Então, essa parece ser a resposta. O diretório pessoal é configurado como um sistema de arquivos criptografado e o sistema operacional desmonta-o em períodos de pouco uso "para proteger seus dados".
Eu só preciso descobrir como desabilitar esse comportamento permanentemente ou quando as tarefas do cron são executadas. Eu acho que a resposta está dentro do ecryptfs-mount-private ...