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 comoroote falhará de outra forma, já que precisa solicitar a senha; Além disso,psproduz a mesma listagem, seja em execução comorootou 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
cestiver vazio ou houver mais de uma correspondência, então$cno teste precisará de aspas duplas para a sintaxe correta. - Se
ccontiver 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.