Renomeando arquivos cron

1

A renomeação de um arquivo cron em / var / spool / cron / significa que o conteúdo do arquivo cron não será mais executado? Ou todos os arquivos em / var / spool / cron / serão executados, não importando o nome do arquivo.

    
por Tom_13 06.10.2009 / 16:52

4 respostas

4

Arquivos em / var / spool / cron (ou / var / spool / cron / crontabs ou / var / spool / cron / tabs em alguns sistemas) serão executados com as permissões do usuário para quem o arquivo é nomeado. Por exemplo, / var / spool / cron / root será executado como usuário "root" e / var / spool / cron / tom_13 será executado como usuário "tom_13".

Se um arquivo crontab for renomeado para outro usuário válido, ele deverá ser executado como esse usuário. No entanto, existem duas ressalvas:

  1. Se você renomear um crontab para um nome de arquivo que não corresponda a um usuário válido, não sei qual é o comportamento esperado. Pode ser executado como root, pode ser executado como o usuário que possui o arquivo ou pode não ser executado.
  2. Alguns daemons cron não verificam as alterações no / var / spool / cron, a menos que você faça essas alterações com o comando crontab . Se você for fazer alterações manualmente, pode ser necessário reiniciar o daemon do cron para que elas sejam efetivadas.

Verifique a página man do crontab ( man 1 crontab ) para ver como funciona. Se você estiver usando o Vixie cron (que a maioria das distribuições Linux parece favorecer atualmente), você pode fazer o seguinte para fazer um crontab de um usuário rodar como um usuário diferente (mesmo efeito de renomear o arquivo, mas mais seguro):

  1. Salve o crontab do usuário antigo em um arquivo: crontab -u olduser -l > olduser.cron
  2. Importe para o novo crontab do usuário: crontab -u newuser olduser.cron
  3. Exclua o crontab do usuário antigo: crontab -u olduser -r
por 06.10.2009 / 18:20
2

Cron é apertado em / etc / crontab, onde toda a mágica acontece. Na verdade, por padrão, o crontab tem apenas um registro semelhante a este:

-*/15 * * * *   root  test -x /usr/lib/cron/run-crons && /usr/lib/cron/run-crons >/dev/null 2>&1

Como você pode ver, isso executará / usr / lib / cron / run-crons a cada 15 minutos e run-crons, na verdade, é um script.

Dando uma breve olhada no script, você verá quais diretórios devem conter scripts cron:

for CRONDIR in /etc/cron.{hourly,daily,weekly,monthly} ; do

Indo mais fundo e verificando o que é esse script, você pode ver que sim, ele executará todos os scripts nos diretórios apropriados:

for SCRIPT in $CRONDIR/* ; do
    test -d $SCRIPT && continue
    case "$SCRIPT" in
           .svn)           continue ;;
           *.rpm*)         continue ;;
           *.swap)         continue ;;
           *.bak)          continue ;;
           *.orig)         continue ;;
           \#*)            continue ;;
           *~)             continue ;;
    esac

... exceto as extensões de arquivo mencionadas. Então você pode simplesmente adicionar um ".bak" para adicionar o final do arquivo para que o cron não o execute.

NOTA: Esta postagem foi escrita usando o OpenSUSE, e as coisas podem variar para outras distros

    
por 06.10.2009 / 17:31
0

Se você quiser impedir que ele seja executado, uma maneira seria editar o crontab para esse usuário e comentar todas as linhas:

sudo crontab -u username -e

e coloque um # no início de cada linha que não tenha um.

    
por 06.10.2009 / 18:24
0

O homem cron diz o seguinte:

   Cron searches /var/spool/cron for crontab files which are named  after
   accounts  in /etc/passwd; crontabs found are loaded into memory. Cron
   also searches for /etc/crontab and the files in the /etc/cron.d direc-
   tory,  which  are  in  a different format (see crontab(5)).  Cron then
   wakes up every minute, examining all stored  crontabs,  checking  each
   command  to  see if it should be run in the current minute.  When exe-
   cuting commands, any output is mailed to the owner of the crontab  (or
   to  the  user named in the MAILTO environment variable in the crontab,
   if such exists).

   Additionally, cron checks each minute to see if its spool  directoryâs
   modtime  (or  the modtime on /etc/crontab) has changed, and if it has,
   cron will then examine the modtime on all crontabs  and  reload  those
   which  have  changed.   Thus  cron  need  not  be restarted whenever a
   crontab file is modified.  Note that the  Crontab(1)  command  updates
   the modtime of the spool directory whenever it changes a crontab.

Então, se eu interpretar isso corretamente, uma renomeação para um usuário inexistente fará o truque ..

    
por 07.10.2009 / 10:00