Há alguns problemas com o seu script.
1. Variável de verificação $ não cotada
Nesta parte,
{
echo $check
} | crontab -u ubuntu -
echo $check
expandirá para echo */$2 * * * * <other text here>
, mas bash *
executará a expansão de nome de arquivo no conteúdo do diretório de trabalho atual do script em cada um dos símbolos glob star. Assim, efetivamente, seu crontab
recebe uma string final completamente incorreta.
2. Variável nula potencial
Sua variável $check
é definida se e somente se $b
for maior que 1. Bem, o que acontece quando $b
é 1? sua variável não será definida.
if [ $b -gt 1 ];
then
check="*/$a * * * * /usr/bin/php /var/www/html/requests/check.php > /dev/null"
fi
Isso também significa que quando você echo
da variável, o comando crontab
receberá uma string nula. Assim, você pode querer implementar outra instrução if para verificar se $check
variable é nulo, como
if [ "x$check" != "x" ];
then
echo "$check" | crontab -u ubuntu -
fi
E, claro, por favor, por favor, por amor ao script de shell, cite suas variáveis de string.
Conforme solicitado nos comentários, várias entradas podem ser enviadas para o crontab de maneira semelhante:
$ check1="*/2 * * * * bash -c 'wall <<< \"check1\"'"
$ check2="*/2 * * * * bash -c 'wall <<< \"check1\"'"
$ printf "%s\n" "$check1" "$check2" | crontab -u $USER -
A idéia aqui é que printf
mantém os argumentos de processamento até que todos estejam esgotados, então é basicamente o mesmo que um loop for. Alternativamente, pode-se anexar cada string de crontab desejada em array e iterar usando loop por meio desse mesmo array.