나는 최근에 간단한 해결책을 생각해 냈습니다.crontab 로깅 문제다음과 같이 이 특정 수정 사항("로그인 셸 플래그"를 사용하여 스크립트 실행)을 사용할 때의 장점과 단점이 무엇인지 궁금합니다.
#!/bin/bash -l
답변1
[다음에서는 지정되지 않은 "로깅 문제"가 일반적으로 프로필에서 상속되는 누락된 환경 설정과 관련되어 있다고 가정합니다. ]
이 옵션은 bash가 홈 디렉토리에서 -l
다양한 "프로필" 스크립트를 모두 읽도록 지시합니다. /etc
Bash는 일반적으로 대화형 세션(bash가 명령줄 인수 없이 실행되는 경우)에서만 이 작업을 수행합니다.
일반 스크립트는 구성 파일을 읽을 필요가 없으며 지정된 환경에서 실행되어야 합니다. 즉, 개별 스크립트가 환경과 밀접하게 연결되어 있고 일반 세션 외부에서 실행하려는 경우 개별 스크립트에 대해 이 작업을 수행할 수 있습니다.
crontab은 세션 외부에서 스크립트를 실행하는 예이므로 시도해 보세요!
스크립트가 crontab 전용인 경우 -l
shebang에 추가하기만 하면 됩니다. 스크립트를 다른 방법으로 사용할 가능성이 있는 경우 crontab 자체의 환경 문제를 해결하는 것을 고려하십시오.
0 * * * * bash -l hourly.sh
답변2
솔직히 말해서 로그인 셸에서 비대화형 스크립트를 실행해도 아무런 이점이 없습니다.
로그인 셸은 관련 로그인 셸 초기화 파일( bash
사용됨 ~/.bash_profile
)을 구문 분석하여 셸 세션 환경 등을 설정합니다.
사용자는 이 파일에서 실행 tmux
(예:이 문제) 또는 exec
다른 쉘에서 완전히 실행될 수도 있습니다(예:이 문제,이).
대신 스크립트를 실행해야 하는 환경은 에 있어야 합니다 $BASH_ENV
. 파일은 모든 비대화형 bash
셸에서 사용할 수 있습니다.
크론 작업에서 실행되는 스크립트는 대화형 셸이나 로그인 셸에서 실행되지 않으므로 다음과 같이 실행해야 합니다.
@daily BASH_ENV="$HOME/script.env" "$HOME/script.sh"
(자정에 트리거되는 일일 작업의 경우) 아마도 환경이 설정되는 곳일 $HOME/script.env
것입니다 .$HOME/.bashrc