Você pode executar trabalhos em lote no UNIX/Linux usando qualquer um dos três comandos – at, batch ou cron.
Neste artigo, vamos revisar como agendar um trabalho, visualizar um trabalho e excluir um trabalho usando o comando at.
Você pode agendar um trabalho at de duas maneiras diferentes:
- Programe o trabalho para ser executado em um horário específico. Por exemplo, 3 de julho, 10h
- Programe o trabalho para ser executado em tempo relativo a partir de agora. Por exemplo, daqui a 5 horas.
1. Agende um trabalho usando data e hora específicas
$ na data e hora
Por exemplo, para agendar um trabalho às 11h do dia 20 de maio, use o seguinte comando at.
$ às 11h do dia 20 de maio
2. Agende um trabalho usando tempo relativo
Você pode agendar a execução de um trabalho usando o tempo relativo a partir de agora.
$ agora + COUNT UNIT
Por exemplo, o trabalho a seguir será executado daqui a 1 minuto.
$ agora + 1 min
O exemplo acima lerá os comandos do stdin e executará o trabalho após um minuto. Ao fornecer algo errado no formato da hora, você receberá o erro ‘Hora distorcida’.
Você pode agendar um trabalho em segundo plano para daqui a 1 hora (ou) daqui a 1 dia usando o seguinte comando at:
$ agora + 1 hora $ agora + 1 dia
Semelhante ao comando at, você também pode usar o crontab para executar trabalhos em um horário agendado. Consulte nosso artigo anterior de 15 exemplos de comandos cron.
3. Veja todos os trabalhos agendados usando atq
Você pode usar o comando atq (ou at -l) para exibir todos os trabalhos do comando at que estão agendados ou em execução no momento.
O seguinte comando atq listará todos os trabalhos at pendentes. O primeiro número mostrado é o número do Job, seguido do horário em que o processo será executado e do nome do usuário.
$ atq 4 20/04/2010 11:00 por sathiya
4. Remover/excluir um trabalho agendado usando atrm
Você pode usar o comando atrm (ou at -d) para excluir um trabalho específico. Por exemplo, para excluir o trabalho número 4, use o seguinte comando atrm.
$ atm 4
5. Execute um trabalho somente quando a média de carga do sistema for <1,5 usando o comando em lote
Você pode agendar um trabalho usando o comando em lote, que solicitará a entrada do comando, que será executado quando a média de carga do sistema for inferior a 1,5.
Após a conclusão bem-sucedida da entrada, você receberá o número do trabalho. Para listar e remover trabalhos em lote, você pode usar os comandos at explicados acima.
6. Agende trabalhos do arquivo usando a opção -f
Primeiro, crie um arquivo de texto que contenha todos os comandos ou scripts de shell que você gostaria que fossem executados em segundo plano usando o comando at.
$ cat meusjobs.txt /home/sathiya/calculate-space.sh /caminho/para/a/shell-script /caminho/para/qualquer/comando/ou/script
Usando a opção -f, você pode executar o comando at para obter a entrada do arquivo em vez de stdin.
Seguir o comando at executará todos os trabalhos de myjobs.txt daqui a 1 hora.
$ at -f myjobs.txt agora + 1 hora
7. Permitir e proibir o uso de determinados usuários em trabalhos
O administrador do sistema pode controlar quem pode agendar um trabalho at e quem não pode usar os arquivos at.allow e at.deny.
Primeiro, o sistema verifica o arquivo at.allow. Se at.allow existir, apenas os nomes de usuário especificados no arquivo at.allow poderão usar o comando at.
Em seguida, (se at.allow não existir), o sistema verifica o arquivo at.deny. Se at.deny existir, os nomes de usuário especificados no arquivo at.deny não terão permissão para usar o comando at.
Por padrão, a maioria dos sistemas usa o arquivo at.deny para impedir que certos usuários usem o comando at, como www-data, guest, backup, man user.
8. Execute o comando como nohup
Semelhante ao comando nohup que discutimos anteriormente, você pode executar um comando (ou shell script) no servidor remoto usando o comando at e sair do servidor.
$ at -f meu trabalho agora + 1 min $ saída
Nota: myjob ainda estará em execução mesmo depois de você sair do servidor.
9. Formatos adicionais em tempo de comando
Você pode usar qualquer um dos seguintes formatos de data e hora do comando at:
$ às 10h de amanhã $ às 11h do próximo mês $ às 22h de hoje $ agora + 1 semana $ ao meio-dia