Um único usuário pode ter vários arquivos crontab?

Um único usuário pode ter vários arquivos crontab?

Suponha que estou criando dois arquivos crontab.

  1. /tmp/my-crontab
  2. /root/my-alternate-crontab

Cada arquivo crontab é programado para executar scripts diferentes.

Quando inicio o cronjob o primeiro é substituído pelo mais antigo.

crontab -u smarak /tmp/my-crontab
crontab -u smarak /root/my-alternate-crontab

O acima é possível para um único usuário?

Responder1

Duas maneiras de contornar um único crontab.

Coloque suas entradas do crontab em arquivos em algum diretório, como e ~/crontab.d/thisandthat.cron, em seguida, envie quaisquer alterações delas para o crontab do sistema com:

cat ~/crontab.d/*.cron | crontab -

A extensão .cronserve para evitar a inclusão acidental de arquivos de backup dos editores. Observe que, como todos os arquivos são concatenados, quaisquer variáveis ​​definidas nos arquivos também serão aplicadas aos arquivos posteriores.

Você também pode fazer algo semelhante a como /etc/cron.hourlye amigos são implementados no Debian. O principal /etc/crontabcontém regras como esta:

17 *    * * *   root    cd / && run-parts --report /etc/cron.hourly

Você pode organizar uma única entrada do crontab para executar vários programas. O do Debian run-parts diré semelhante, for f in dir/* ; do "$f" ; doneexceto que ele ignora nomes de arquivos estranhos, novamente para evitar a execução de arquivos de backup criados por editores, etc.

Responder2

Não. Cada usuário possui um crontab. Por que? Porque o crontab é a "tabela" ("tab") de todos os cron jobs associados a um único usuário.

Se você quiser executar várias coisas cron, basta adicionar várias linhas no seu crontab.

Se você tiver vários arquivos com especificações de cron job, basta concatená-los:

cat crontab1 crontab2 crontab3 >my-crontab
crontab my-crontab

Responder3

Você pode simplesmente ler a entrada real e anexar a nova logo em seguida.
Depois de ter este em execução:

crontab -u smarak /tmp/my-crontab

Idealmente, você poderia fazer algo como:

crontab -u smarak <(cat /root/my-alternate-crontab) <(crontab -l)

Mas parece que o crontab não aceita o formulário acima, então aqui está a solução:

cat /root/my-alternate-crontab <(crontab -l)| crontab -u smarak -

Isso funciona para mim. Espero que ajude.

informação relacionada