crontab에서 일반 사용자로 이 스크립트를 실행하고 싶습니다.
#!/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
메모리가 1GB(Webfaction)를 초과하면 내 공유 서버가 모든 데몬을 종료하기 때문에 Sphinx Search 데몬을 다시 실행합니다.
CLI 명령을 통해 수동으로 스크립트를 호출하면 작동하지만 crontab에 추가하면 crontab -e
(
which: no searchd in (/usr/bin:/bin)
/home/user/www/wordpress-page/run-searchd.sh: line 8: --config: command not found
간단히 말해서 루트 수준을 검색하지만 일반 사용자로 ssh를 통해 로그인할 때 내가 직접 호출하는 것처럼 작동하기를 원합니다. 어떻게 해야 하나요?
답변1
$PATH
이는 쉘 외부에서 수행하기 때문일 수 있습니다 crontab
.
command -v searchd | xargs dirname
이 명령은 시스템의 디렉토리를 반환하거나 searchd
대화형 셸에 디렉토리가 없는 경우 오류를 반환합니다. 이제 실행하는 스크립트 상단에서 다음을 수행합니다.searchd
$PATH
crontab
PATH=<directory_from_above_command>:$PATH
searchd
아니면 대신 전체 경로를 사용하십시오 which searchd
.
which
작동 방식을 완전히 이해하려면 아래를 계속 읽으십시오." which "를 사용하지 않는 이유는 무엇입니까? 그러면 무엇을 사용해야 합니까?.
답변2
그냥 직접 사용하세요 searchid
. which
찾을 수 있다면 이미 당신 안에 있는 것이므로 여기서 사용할 $PATH
필요는 없습니다 .which
실행할 수 있는지 확인하려면 유틸리티와 전체 절대 경로를 사용하세요.
질문도 참조하세요" which "를 사용하지 않는 이유는 무엇입니까? 그러면 무엇을 사용해야 합니까?( which
일반적인 상황에 대해).