
새로운 Ubuntu 설치에서 사용자의 PATH
상태는 다음과 같습니다.
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
그러나 동일한 사용자의 cron 환경에서는 다음과 같습니다.
/usr/bin:/bin
홈 디렉토리에 있는 모든 사용자의 도트 파일을 살펴보았는데 거기에는 PATH
.
무엇이 바뀌고 있나요 PATH
? cron은 왜 그것을 사용하지 않습니까 PATH
?
답변1
질문에 대해 - 왜 그럴까요? 설명하는 매뉴얼 페이지는 crontab(5)
IOW를 통해 액세스할 수 있는 페이지 입니다 man 5 crontab
(섹션 1의 기본 페이지가 아님). cron 데몬은 셸 세션을 에뮬레이션하려고 시도하지 않고 cron 작업을 실행할 수 있는 깨끗하고 최소한의 환경을 설정한 다음 crontab 파일이 자체 임의의 환경 변수를 설정할 수 있도록 허용합니다. 데비안과 함께 제공되는 최신 cron 데몬에는 pam_env
등에 대한 몇 가지 추가 조항도 있습니다.
답변2
Cron은 로그인 쉘에서 프로세스를 실행하지 않습니다. 이로 인해 프로세스가 실행될 때 모든 일반적인 스크립트가 소싱되지 않습니다.
로그인 셸 내에서 프로세스를 실행하면 사용자 환경이 복제되어야 합니다.
crontab에 다음과 같은 내용을 넣고 두 출력을 비교합니다.
*/1 * * * * /usr/bin/env > /tmp/env
*/1 * * * * /usr/bin/bash -l -c /usr/bin/env > /tmp/bashenv
보시다시피, 그렇지 않은 /tmp/bashenv
수많은 환경 변수가 있습니다 /tmp/env
. 이는 env
을 사용하여 로그인 셸에서 호출되었기 때문입니다 bash -l
.