Como usar o comando no Crontab?

2

Eu gostaria que o crontab executasse esse script como um usuário comum:

#!/usr/bin/env bash

PIDFILE=wp-content/uploads/sphinx/var/log/searchd.pid


if ! test -f ${PIDFILE} || ! kill -s 0 'cat ${PIDFILE}'; then
    'which searchd' --config /home/user/www/wordpress-page/wp-content/uploads/sphinx/sphinx.conf
fi

Ele simplesmente reexibe o daemon Sphinx Search, porque meu servidor compartilhado mata todos os meus daemons se algo exceder 1GB de memória RAM (sua Webfaction).

Quando eu chamo esse script manualmente via comando CLI ele funciona, mas se eu anexá-lo no crontab (usando crontab -e ) eu recebo um email com um erro

which: no searchd in (/usr/bin:/bin)
/home/user/www/wordpress-page/run-searchd.sh: line 8: --config: command not found

Simplesmente o que pesquisa o nível da raiz, mas eu gostaria que ele se comportasse como chamado por mim mesmo quando eu logar via ssh como usuário regular. Como fazer isso acontecer?

    
por Marecky 26.09.2017 / 18:29

2 respostas

2

Provavelmente é por causa do $PATH . Faça isso no seu shell fora de crontab :

command -v searchd | xargs dirname

Este comando retornará um diretório onde searchd está em seu sistema ou um erro se você não tiver searchd em seu $PATH , mesmo em um shell interativo. Agora faça isso no topo do seu script que você executa em crontab :

 PATH=<directory_from_above_command>:$PATH

Como alternativa, basta usar um caminho completo para searchd em vez de which searchd .

Leia também isto em which se você quiser entender como isso funciona: Por que não usar" que "? O que usar então? .

    
por 26.09.2017 / 18:36
0

Use apenas searchid diretamente. Se which puder encontrá-lo, ele já está no seu $PATH , então não é necessário usar which aqui.

Se você quiser ter certeza de que pode executá-lo, use o utilitário com o caminho absoluto completo.

Veja também a pergunta Por que não usar "which"? O que usar então? (sobre which em geral).

    
por 28.09.2017 / 22:14