Linux - mude para o usuário “cron”

0

Às vezes, problemas com tarefas agendadas não são executados, e diagnosticar por que isso pode ser difícil. O que seria útil é mudar para o mesmo usuário que as tarefas agendadas sob, para que eu possa ver se há um aborrecimento de permissões ou algo assim. Alguém pode me dizer como fazer isso? Minha versão linux, de uname -r , é 2.6.32-36-generic

felicidades, max

EDIT - btw eu sei como trocar de usuário! Minha pergunta é mais sobre descobrir qual usuário mudar para.

EDIT - no meu problema atual eu tenho uma linha no crontab que funciona quando eu colá-lo em um terminal (em qualquer pasta), mas falha quando executado a partir do cron. Estou tentando descobrir o porquê. Estou dando o caminho completo para todos os arquivos usados.

42 13 * * * cd /path/to/my/working/folder && /path/to/my/working/folder/script/runner 'MusicService.update_cached_data' -e staging

(A hora 42 13 está lá porque essa é a última vez que eu testei)

    
por Max Williams 28.05.2013 / 13:27

2 respostas

5

Cronjobs são executados como qualquer usuário que tenha definido o crontab. Eles não funcionam como um usuário especial. Normalmente, se você sabe que existe um crontab, você sabe quem o configurou. Você pode ver os crontabs do usuário atual executando

crontab -l

Você pode encontrar crontabs específicos do usuário no diretório /var/spool/cron/crontabs/ . Cada usuário que criou um crontab terá um arquivo (cujo nome é o nome do usuário) nesse diretório. Por padrão, esses arquivos só podem ser lidos pelo usuário que os criou, portanto, você não pode cat sem usar as permissões deles.

Este pequeno scriptlet listará todos os comandos do cron para cada usuário:

for u in $(find /var/spool/cron/crontabs/ -type f); do 
 user='basename $u'; 
 echo "------- $user ----"; 
 crontab -u  $user -l | grep -v "#"; 
done

Isso listará todos os cronjobs de cada usuário que tenha um arquivo crontab em /var/spool/cron/crontabs/ .

Finalmente, você também tem os crontabs em todo o sistema que estão em /etc/crontab , que você pode ver executando cat /etc/crontab .

Em resposta ao seu comentário, se você deseja carregar variáveis específicas que são definidas em um determinado arquivo, você pode source desse arquivo em crontab :

42 13 * * * . ~/.bashrc && cd /path/to/my/working/folder && /path/to/my/working/folder/script/runner 'MusicService.update_cached_data' -e staging

Isso é . seguido pelo arquivo que você deseja carregar.

Finalmente, aqui estão algumas informações relevantes de man 5 crontab :

   An active line in a crontab will be either  an  envi‐
   ronment  setting or a cron command.  The crontab file
   is parsed from top to bottom, so any environment set‐
   tings  will  affect only the cron commands below them
   in the file.  An environment setting is of the form,

       name = value

   where  the  spaces  around  the  equal-sign  (=)  are
   optional,  and  any  subsequent non-leading spaces in
   value will be part of the  value  assigned  to  name.
   The  value  string may be placed in quotes (single or
   double, but matching) to preserve leading or trailing
   blanks.  To  define an empty variable, quotes must be
   used. The value string is not parsed for  environmen‐
   tal  substitutions  or replacement of variables, thus
   lines like

       PATH = $HOME/bin:$PATH

   will not work as you might expect.

   An alternative for setting up the  commands  path  is
   using  the  fact  that  many  shells  will  treat the
   tilde(~) as substitution of $HOME, so if you use bash
   for your tasks you can use this:

        SHELL=/bin/bash
        PATH=~/bin:/usr/bin/:/bin

   [...]

   Several  environment  variables  are set up automati‐
   cally  by  the  cron(8)  daemon.   SHELL  is  set  to
   /bin/sh,  and  LOGNAME  and  HOME  are  set  from the
   /etc/passwd line of the crontab's owner. PATH is  set
   to  "/usr/bin:/bin".   HOME,  SHELL,  and PATH may be
   overridden by settings in the crontab; LOGNAME is the
   user  that  the  job  is running from, and may not be
   changed.

   [...]

   On the Debian GNU/Linux  system,  cron  supports  the
   pam_env  module,  and loads the environment specified
   by /etc/environment  and  /etc/security/pam_env.conf.
   It     also    reads    locale    information    from
   /etc/default/locale.  However, the  PAM  settings  do
   NOT  override  the  settings  described above nor any
   settings in the crontab file itself. Note in particu‐
   lar   that   if   you   want   a   PATH   other  than
   "/usr/bin:/bin", you will  need  to  set  it  in  the
   crontab file.
    
por 28.05.2013 / 14:50
0

Por que você não configura o usuário para executar esse cronjob específico? por exemplo:

42 13 * * * root cd /path/to/my/working/folder && ...

este trabalho será executado como root ... Se você inseriu trabalho em / etc / crontab

    
por 28.05.2013 / 14:54