Eu preciso executar um script diariamente. O script deve ser executado como um usuário específico (por exemplo, usuário1) e não como raiz. Então, coloquei o arquivo cron em /etc/cron.d e coloquei o nome do usuário na linha (2ª coluna). Mas dá um erro dizendo que o comando não foi encontrado. Eu suspeito que o script não foi executado como o ambiente do usuário1. Perdi algo?
19
Respostas:
Somente
/etc/crontab
e os arquivos/etc/cron.d/
têm um campo de nome de usuário. Nesse arquivo, você pode fazer isso:No crontab do root,
sudo crontab -e
você pode usar:Ou você pode usar o crontab real do usuário assim:
A segunda coluna em qualquer arquivo crontab é para a hora em que você deseja que o trabalho seja executado. Você quis dizer o sexto campo?
fonte
/etc/cron.d/
arquivos fazem parte/etc/crontab
.sudo
também não faz sentido. Vou remover essa parte.sudo su...
geralmente é desnecessário;sudo -u <user> <command>
geralmente é suficiente. (b) o sudo bloqueará alguns sistemas se não houver um TTY conectado (como quando executado pelo cron). Isso pode ser corrigido no seu arquivo sudoers.Pode ser necessário definir o PATH para esse usuário, se o executável que você estiver usando estiver em, digamos, / usr / local / bin. Para definir o PATH, coloque algo assim antes dos cronjobs:
A outra maneira é especificar completamente o caminho para sample_executable em seu cronjob, portanto:
Se sample_executable referir os executáveis que não estão no PATH padrão, você deverá usar a primeira opção.
fonte
O diretório típico para o usuário crontabs está em / var / spool / cron / crontabs. O formato do arquivo é o que não inclui o nome de usuário. Os crontabs do usuário pertencem ao usuário e recebem o nome do usuário no modo 0600. É melhor lidar com isso gravando seu arquivo de guia e usando-o
crontab -u username filename
para configurar as entradas cron que você deseja para esse usuário.fonte