.sh
프로세스를 종료하는 매우 간단한 스크립트가 있습니다 . 프로세스는 PID를 pid2.txt
.
pkill -e -P $(cat pid2.txt)
exit
명령줄에서 실행하면 sudo ./myscript.sh
제대로 작동합니다.
cron으로 실행하면 */2 * * * * /etc/mylocation/myscript.sh
오류가 발생합니다.
cat: pid2.txt: No such file or directory pkill: option requires an argument -- 'P'
내가 뭘 잘못했나요?
답변1
cron 작업은 대화형 세션에 있는 것과 동일한 작업 디렉터리를 사용하여 반드시 실행될 필요는 없습니다. 즉, 파일이 pid2.txt
있다고 생각하는 곳에서는 사용할 수 없을 수도 있습니다. pid2.txt
파일의 절대 경로를 사용하도록 스크립트를 변경하십시오 .
exit
스크립트 끝에서부터 삭제할 수도 있습니다 . 효과가 없습니다.
답변2
pid2.txt
스크립트에 전체 경로를 추가하면 작동합니다.
설명하다: cron 작업은 매우 작은 환경에서 실행되며 쉘 없이(강제 생성하지 않는 한) crond에 의해 직접 실행되므로 일반 쉘 설정이 발생하지 않습니다. 따라서 cron이 호출하는 모든 파일과 스크립트의 경로를 명시적으로 지정해야 합니다.
답변3
profile
앞에서 언급한 것과 같은 Cron 작업에는 동일한 환경 변수( 스크립트 의)가 없으며 bashrc
일반적으로 동일한 환경 변수가 있어서는 안 됩니다.
이 문제를 해결하기 위해 나는 동일한 변수(바이너리 및 라이브러리에 대한 경로) 등을 얻기 --login
위해 추가하는 경향이 있습니다.#!/bin/bash
다음 예제에서는 pkill
다음과 같은 상황에서 실행할 수 있습니다 cron
.
#!/bin/bash --login
pkill -e -P $(`cat /home/userid/pid2.txt`)