Executar um script de shell em segundo plano no Unix no horário específico diariamente

2

Eu tenho um script de shell task.sh que é necessário para ser executado em segundo plano no Unix em horários específicos diariamente.

Eu sei que nohup é útil para executar o script em segundo plano. Mas se preocupar em como agendar esse script para ser executado diariamente no horário especificado.

Observação: não sou usuário root. Eu não tenho permissões para o comando crontab .

Qualquer ajuda seria muito apreciada.

    
por learner1 15.02.2016 / 08:23

2 respostas

1

A maneira correta de fazer isso é usando o Crontab - se você não tem acesso ao seu crontab você realmente deveria falar com o seu administrador - eles provavelmente não querem que você esteja executando tarefas agendadas. Dito isso, antes de dizer para não ter permissões para o comando crontab, tente executar "crontab -e" - cada usuário tem seu próprio arquivo cron e o crontab - tentará editar o seu. (Eu observo quando eu executo o crontab sozinho como um usuário que apenas congela)

Você pode executar praticamente qualquer trabalho em segundo plano adicionando um "&" personagem para o trabalho. Gostaria de insistir contra isso, mas você poderia escrever um script em um loop while que verifica o tempo, depois aguarda um minuto, verifica novamente, etc, e se ele corresponde executa o comando. Você pode executar esse script com & para executá-lo em segundo plano. Você também pode ter problemas para subverter o sistema ...

Outro comando para procurar é "tela". Isso permite que você conecte e desconecte seu terminal do console - ele pode ser uma maneira útil de executar algo em segundo plano, mas poder ver e interagir com ele (você pode filtrar, executar o programa em primeiro plano e, em seguida, desanexar). da tela e reconecte mais tarde)

EDITAR

Um script para verificar a hora uma vez por minuto e executar o comando no momento apropriado:

#! /bin/bash

RUNAT="07:54"

while [ 1 ]
do
    DATE='/bin/date +%H:%M'
    if [ $DATE. = $RUNAT. ]
    then
        /path/to/script.sh
    fi

    sleep 60
done

Salve isto como (por exemplo) mycron.sh, chmod 755 mycron.sh para que seja executado, Modifique a linha RUNAT para acionar quando você quiser que seu script seja executado e, em seguida, execute este script como mycron.sh & por isso é executado em segundo plano.

Este script não causará o estouro de pilhas porque ele só executa o comando uma vez por dia, não "se encadeia"

    
por 15.02.2016 / 08:38
1

Contanto que você tenha acesso a em (não provável se cron não estiver disponível, mas valer uma tentativa), você pode emular tarefas agendadas simples. A maneira mais simples de fazer isso é fazer at executar o script em um determinado momento e deixar que o script faça at executar novamente quando for necessário.

No meu exemplo, o script apenas grava o registro de data e hora de sua última execução e faz o tempo de um minuto:

/tmp$ cat cronbyat.sh
#!/bin/sh


echo "last run: 'date +%Y%m%d-%H%M%S'" >> /tmp/cronbyat.log

echo "/tmp/cronbyat.sh" | at now + 1 minute

/tmp$ echo "/tmp/cronbyat.sh" | at now + 1 minute
warning: commands will be executed using /bin/sh
job 5 at Mon Feb 15 09:00:00 2016
/tmp$ tail -f /tmp/cronbyat.log
last run: 20160215-090000
last run: 20160215-090100
last run: 20160215-090200
last run: 20160215-090301
last run: 20160215-090400
^C
/tmp$ atq
10      Mon Feb 15 09:05:00 2016 a lx
/tmp$ atrm 10
/tmp$ atq
/tmp$

Quando o script não é mais necessário, seu atual no trabalho deve ser eliminado, conforme mostrado nas últimas linhas. Infelizmente, se uma corrida for perdida devido a qualquer causa, a corrente está quebrada. Assim, algum tipo de feedback deve ser dado e verificado.

    
por 15.02.2016 / 09:12