cron
executa shells em um ambiente modificado com um% mínimo dePATH
e presumivelmente /usr/bin
não presente, portanto, /usr/bin/nohup
não está sendo encontrado.
Você pode:
-
adicione
/usr/bin
aoPATH
, em vez de modificar ocrontab
, você deve adicionar isso na parte superior do script:#!/bin/sh export PATH="$PATH":/usr/bin nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
-
Use o caminho absoluto para
nohup
:#!/bin/sh /usr/bin/nohup /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch &
Observe que, de acordo com a entrada crontab
, você está executando o script como um argumento para sh
( dash
) enquanto possui exatamente o mesmo shebang. Neste caso, isso não faz qualquer diferença, mas tenha cuidado com isso se o shebang for diferente. Normalmente, um faria o script executável e usaria o shebang para indicar o intérprete desejado.
Agora, a parte mais importante . cron
executa todos os jobs dados em suas respectivas subshells e gera essas subshells paralelas (non-blocking), isto é, executa jobs de maneira paralela. Então você não precisa do nohup
e do backgrounding ( &
), apenas faça (baseado no seu exemplo, /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch
é executável):
@reboot /home/ubuntu/elasticsearch-2.3.4/bin/elasticsearch