/ usr / local / bin에있는 crontab과 바이너리


4

나는 안으로 일하고있다. Redhat 폴더에 몇 개의 프로그램이 있습니다. /usr/local/bin 나는에서 전화하고 싶다. crontab ...에 대한 root 사용자. 그 폴더에 바이너리를두면 셸처럼 프로그램을 직접 호출 할 수 있다고 생각했습니다.

기본적으로 매번 폴더를 지정해야 아래의 crontab이 작동하지 않습니다.

 5 9  * * 1,2,3,4,5 my_bin some_args

하지만 나는 그것을

 5 9  * * 1,2,3,4,5 source ~/.bashrc; /usr/local/bin/my_bin some_args

이유를 아십니까?

내가 소싱 한 이유 bashrc 특히 일부 환경 라이브러리를 추가하는 것이 었습니다. LD_LIBRARY_PATH 내 바이너리가 공유 라이브러리를 찾을 수 없어서 /usr/local/lib.


1
아마도 무의미하지만 여전히 : 오류 (전자 메일로 루트 사용자에게 전송되었을 가능성이 높음)를 말하고 파일이 실행 가능해야합니다 chmod +x ).
Valmiky Arquissandas

답변:


9

cron 작업은 매우 최소한의 환경에서 실행되며 이후 직접 실행됩니다. crond 쉘을 사용하지 않으면 (강제로 생성하지 않는 한) 일반 쉘 설정은 결코 일어나지 않습니다. 이 문제를 해결하기위한 두 가지 표준 방법이 있습니다. 첫째, crontab에 환경 변수를 정의 할 수 있습니다 (모든 작업에 적용됩니다 - 최소한 정의 뒤에 나열된 항목).

PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
LD_LIBRARY_PATH=/usr/local/lib

5 9  * * 1,2,3,4,5 my_bin some_args

둘째, 환경에 덜 의존적이되도록 스크립트를 편집 한 다음 (예 : 자신이 필요로하는 것을 정의해야 함) crontab 항목의 전체 경로를 사용할 수 있습니다.

5 9  * * 1,2,3,4,5 /usr/local/bin/my_bin some_args

안녕 Gordon! 고맙습니다. 본질적으로 두 번째 솔루션을 사용하고 있지만 첫 번째 솔루션을 정말 좋아합니다.
Abruzzo Forte e Gentile

일반적으로 / usr / bin 프로그램을 사용할 수 있습니다. 원하는 프로그램 (ln -s / usr / local / bin / my_bin / usr / bin / my_bin)을 연결하지 않는 이유가 있습니까?
juacala

@juacala 나는 cron의 기이함을 해결하기 위해 파일 시스템 조직을 엉망으로 만들지 않을 것이다. 그만큼 파일 시스템 계층 구조 표준 로컬에 설치된 바이너리는 / usr / local / bin이 아니라 / usr / bin에 속해 있다고 말합니다. symlinks를 사용하는 것은 기술적으로 이것을 위반하지 않지만 확실히 의도를 위반합니다. 기호 링크를 최신 상태로 유지하지 않으면 (프로그램이 추가 / 제거 될 때 기호 링크를 추가 / 제거하는 경우) 또 다른 문제가 발생합니다. 또한 / sbin 또는 / usr / sbin의 바이너리를 처리하지 않습니다.
Gordon Davisson

나는 이것을하기로 결정했다. 0 0 * * * /bin/bash -l -c "PATH=\"$PATH:/usr/local/bin\"; <your command here>"
ndbroadbent
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.