일반 환경에서 cronjob을 실행하는 방법은 무엇입니까?

일반 환경에서 cronjob을 실행하는 방법은 무엇입니까?

cronjob을 실행하는 데 사용되는 셸 및 환경 변수는 NET에서 제공한 것과 완전히 다릅니다 gnome-terminal. 터미널에서 실행하는 것과 동일한 컨텍스트에서 cronjob을 어떻게 실행할 수 있나요?

내 현재 솔루션은 cronjob 을 실행하는 것이지만 env DISPLAY=:0.0 gnome-terminal -e my-command이로 인해 허용되지 않는 gnome 터미널이 팝업됩니다.

답변1

의 상단에서 필요한 환경 변수를 명시적으로 지정하거나 crontab어딘가에서 환경을 가져올 수 있습니다.

환경 변수를 명시적으로 추가하려면 스크립트 상단(해시뱅 뒤)에서 다음과 같은 줄을 사용할 수 있습니다.

FOO=bar

파일에서 가져오려면 다음과 같은 줄을 사용하세요.

. /foo/bar/baz

포함할 질문에 대한 귀하의 편집 내용에 대한 응답으로 소스를 얻을 gpg-agent수 있어야 합니다 . 존재하지 않는 경우 부터 시작 해보세요 .~/.gpg-agent-info$GPG_AGENT_INFOgpg-agent--write-env-file "${HOME}/.gpg-agent-info"

답변2

맞습니다. 프로세스는 다른 프로세스 환경을 볼 수 없어야 합니다. 이것은 주로 의도적으로 설계된 것입니다. 그러나 export환경은 다른 용도로 사용할 수 있도록 깔끔하게 패키지됩니다.

당신이 할 수 있는 일은 당신 안에 있다..bashrc:

[[ $DISPLAY ]] && export > ~/.cron_bread_crumbs/gonme_env

그런 다음 cron 작업에서 간단히 선택하도록 하세요.

. /home/user/.cron_bread_crumbs/gnome_env

파일은 다음과 같은 줄로 채워집니다.

declare -x ENV_VARIABLE="value"

물론 값은 인용됩니다. 이것이 바로 "깔끔하게 포장되어 있다"는 의미입니다.

이 값을 얻고 내보내기를 호출한다는 것은 declare -x상위 cron에서 시작되는(및 분리될 수 있는) 모든 후속 프로세스도 이러한 값을 상속한다는 것을 의미합니다.

하지만 이는 gnome 터미널이 열려 있다고 가정하고 cron이 실행되기 전에 값이 새로 고쳐지기 때문에 약간 어색합니다. 그러나 크론 작업에 약간의 온전함을 추가하는 것은 그리 어렵지 않습니다.

다른 옵션은 환경을 명명된 파이프에 덤프하는 동안 차단하는 작업을 백그라운드에서 시작한 다음 cron 작업이 거기에서 가져오도록 하는 것입니다. 어쨌든 문제는 크론 작업이 변수를 얻을 수 있도록 Gnome 터미널을 통해 어떤 일이 발생하는지 확인하는 것입니다.

관련 정보