Existe uma confusão entre diferentes maneiras de adicionar cron
jobs.
Se você adicionar uma tarefa com crontab -e
, não haverá coluna user
(a tarefa será executada como usuário atual), enquanto as entradas em /etc/crontab
deverão ter a coluna user
. Como as entradas estão em /etc/crontab
, você precisa usar o primeiro formato (observe que no tempo de programação *
e */1
são equivalentes).
Desde que você esteja usando a entrada correta crontab
, seu script usando lsof
deve funcionar, embora grep -q
pare a saída desnecessária. Observe que lsof
precisa ser executado como root
para obter uma lista completa.
Seu script usando ps
é mais problemático: -
- O uso de
sudo
é desnecessário se você estiver executando comoroot
e falhará de outra forma, já que precisa solicitar a senha; Além disso,ps
produz a mesma listagem, seja em execução comoroot
ou não. - Se houver mais de uma correspondência no
ps ... | grep ...
, você precisará de aspas duplas para a sintaxe correta na configuração dec
. - Se
c
estiver vazio ou houver mais de uma correspondência, então$c
no teste precisará de aspas duplas para a sintaxe correta. - Se
c
contiver mais de uma instância descript.sh
, o teste falhará.
Você pode contornar esses problemas usando a mesma técnica usada no script lsof
: -
if ! ps aux | grep -q '[s]cript\.sh'; then
command ...
fi
A propósito, eu gosto do uso de [s]cript\.sh
para parar grep
em si.