Como executar um trabalho cron como um usuário específico?

66

Gostaria de executar um trabalho cron como um usuário específico na minha máquina. Como posso especificar o usuário para que um trabalho cron seja executado como ?.

Os trabalhos do cron estarão em execução em um servidor (em Ubuntu 10.0.4). Os 'usuários' são usuários criados especificamente para executar tarefas específicas do lado do servidor. Esses 'usuários' têm o seguinte em comum:

  • Não é possível fazer logon no sistema
  • Acesso restrito a pastas / arquivos específicos
morfoso
fonte

Respostas:

79

Supondo que você não pode simplesmente entrar e adicioná-lo ao crontab desse usuário, coloque um arquivo no /etc/cron.d. Ele deve ser formatado como um cronjob normal, mas com um campo extra. Antes do comando executar e após o tempo, coloque o usuário. Você deve conseguir encontrar exemplos no seu sistema.

Exemplo:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command
Daenyth
fonte
Eu acho que essa é a resposta correta. Vou ter que procurar alguns exemplos e investigar um pouco mais.
morpheous 2/08/10
2
Mais um de mim, esta é a melhor maneira de fazer o que você deseja. Mais precisamente, olhe no arquivo / etc / crontab e você verá que, após o modelo de horário e antes do comando, há "root" escrito lá. Isso significa que "root" executa esses comandos. Basta adicionar sua própria agenda e, em vez de "root", usar qualquer usuário. Além disso, observe que, se você usar crontabs por usuário (conforme sugerido por Eric D), poderá perder a funcionalidade do crontab amplo do sistema (/ etc / crontab e /etc/cron.d).
Patkos Csaba
3
A melhor solução que eu acho seria apenas crontab -u <user> -emanter tudo em um só lugar, o que você pode fazer como raiz. Porém, eu gosto de agrupar meus trabalhos cron por função, em vez de apenas pelo usuário, então essa é a solução preferível para mim.
Stuart H
41

Como root, para editar o cron do usuário1:

crontab -u user1 -e

Você também pode iniciar seu comando com:

su user1 -c foo bar

Mas, frequentemente, os próprios scripts reduzem seu próprio acesso quando iniciados como raiz.

Eric Darchis
fonte
1

Estou procurando por isso há algumas semanas e isso finalmente funcionou ...

Crie seu script como usuário1

ssh user1@ipaddress
nano hourly-event.sh

insira algum comando

#!/bin/bash
echo "YAY it works" > /home/user1/yay.txt

torná-lo executável

chmod 755 hourly-event.sh

edite o crontab para user1

sudo crontab -u user1 -e

coloque uma linha na parte inferior apontando para o (s) seu (s) script (s)

# m h  dom mon dow   command
*   *   *   *   *    bash ./hourly-event.sh

exit - salvando as alterações (mostrará um diretório / tmp ao salvar ... tudo bem)

espere a hora do minuto

abra seu yay.txt recém-criado

nano /home/user1/yay.txt

agora você deve ter uma janela nano aberta com "YAY it works" como a primeira e única linha se a parte inferior da sua janela nano disser New File ... bem ... eu não sei

você também pode verificar sua entrada do crontab recentemente para o user1 em: / var / spool / cron / crontabs / user1

PAZ

user220364
fonte
0

Às vezes, você pode querer que o usuário carregue seu ambiente, especialmente ao usar "rbenv", "nvm", assim:

0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...

(aqui o comando source ~/.bash_profilecarregará o ambiente Ruby ou Node.

Siwei Shen 申思维
fonte