Quando cron é executado em /root/auto-restart.sh , ele é executado usando sh , nas linhas de sh -c /root/auto-restart.sh . Como você usou a opção -f com pgrep , pgrep procura auto-restart.sh em qualquer lugar nas linhas de comando dos processos em execução; então combina auto-restart.sh e sh -c /root/auto-restart.sh . Este último aparece como sh na saída de pgrep -l .
pgrep -c auto-restart.sh
lhe dará o comportamento que você está procurando. (Eu perdi -l porque não tem sentido com -c .)
(Seu servidor provavelmente tem um timer de watchdog , que pode ser mais apropriado - embora eu imagine que, se o servidor estiver ainda funcionando suficientemente bem para executar trabalhos cron, mas é considerado baixo, então o cão de guarda não tropeçaria.)