Como especificar no crontab por qual usuário executar o script? [fechadas]


176

Eu tenho alguns trabalhos de crontab que são executados na raiz, mas isso me dá alguns problemas. Por exemplo, todas as pastas criadas no processo dessa tarefa cron estão na raiz do usuário e na raiz do grupo. Como posso fazê-lo rodar sob o usuário www-data e agrupar www-data para que, quando executo scripts do meu site, eu possa manipular essas pastas e arquivos?

Meu servidor roda no Ubuntu.
O trabalho atual do crontab é:

*/1 * * * * php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

Respostas:


335

Em vez de criar um crontab para ser executado como usuário root, crie um crontab para o usuário que você deseja executar o script. No seu caso, crontab -u www-data -eeditará o crontab para o usuário www-data. Basta colocar seu comando completo e removê-lo do crontab do usuário root.


54
Funciona da mesma maneira quando você usa crontab -ecomo um usuário específico.
kulak

7
Mas esse crontab será verificado na inicialização do sistema ou somente quando o usuário efetuar login?
de Bruno Dedo

11
cronOs sistemas on * nix não exigem que um usuário efetue login para executar as tarefas especificadas no crontab de um usuário específico.
3030 Mike

2
Isso também definirá a identificação do grupo conforme solicitado pelo OP? E se o grupo desejado for diferente do grupo principal do usuário?
askyle

49

EDIT: Observe que este método não funcionará com o crontab -e, mas só funcionará se você editar o arquivo / etc / crontab diretamente. Caso contrário, você pode receber um erro como/bin/sh: www-data: command not found

Pouco antes do nome do programa:

*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

Isso faria com que o usuário apache fosse o www-data, certo?
Arma dec

19
Observe que esse método não funciona crontab -e, mas funciona apenas se você editar /etc/crontabdiretamente. Leia o comentário na parte superior deste arquivo para obter mais informações.
Imgx64

5
O usuário pode ser especificado apenas no sistema crontab
James Roth

Tenho alguns trabalhos agendados no sistema crontab. Quando faço sudo crontab -e, vejo os trabalhos. Mas eu abro o arquivo, /etc/crontabnão há trabalhos. Isso é estranho? Além disso, se eu sudo crontab -eadicionar um trabalho com o usuário especificado, ele funcionará?
eNeMetcH

14

Como você está executando o Ubuntu, o seu sistema crontab está localizado em /etc/crontab.

Como usuário root (ou usando o sudo), você pode simplesmente editar este arquivo e especificar o usuário que deve executar este comando. Aqui está o formato das entradas no sistema crontab e como você deve inserir seu comando:

# m h dom mon dow user  command
*/1 * * * * www-data php5 /var/www/web/includes/crontab/queue_process.php >> /var/www/web/includes/crontab/queue.log 2>&1

Obviamente, as permissões para o seu script php e seu arquivo de log devem ser definidas para que o www-datausuário tenha acesso a eles.


Eu pensei que isso deveria ser equivalente a crontab -e; mas não.
zinking

5
Os documentos do Ubuntu recomendaram não editar o arquivo / etc / crontab, pois ele pode ser substituído por atualizações. O crontab -e criará um arquivo cron específico do usuário em / var / spool / cron / crontabs.
Hemm

9

Você também pode tentar usar runuser(como root) para executar um comando como um usuário diferente

*/1 * * * * runuser php5 \
            --command="/var/www/web/includes/crontab/queue_process.php \
                       >> /var/www/web/includes/crontab/queue.log 2>&1"

Veja também: man runuser


runusernão está incluído no Ubuntu.
Raptor

1
O runuser está na versão mais recente do Ubuntu. Existem também alternativas ao runuser, conforme discutido nesta resposta unix.stackexchange.com/questions/169441/ubuntu-runuser-command , por exemplo, su e sudo.
Russell E Glaue

8

A sugestão de Mike parece o "caminho certo". Me deparei com esse segmento querendo especificar o usuário para executar vncserverna reinicialização e queria manter todos os meus trabalhos cron em um só lugar.

Eu estava recebendo o seguinte erro para o cron VNC:

vncserver: The USER environment variable is not set. E.g.:

No meu caso, eu pude usar sudopara especificar como executar a tarefa.

@reboot sudo -u [someone] vncserver ...

1
Recebi esta mensagem nos logs:sudo: sorry, you must have a tty to run sudo
Renato Gama

@renatoargh Você provavelmente está rodando no RedHat. Dê uma olhada nesta resposta no Unix.SE.
Kaiser #
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.