기본 Bash 스크립트(GUI 프로그램을 시작하는 데 사용됨)는 cron에서 부분적으로 작동합니다.

기본 Bash 스크립트(GUI 프로그램을 시작하는 데 사용됨)는 cron에서 부분적으로 작동합니다.

이 스크립트를 사용하여 밤새 Firefox를 다시 시작합니다(패키지 관리자 및 플러그인 업데이트 적용).

#!/bin/bash
killall -s SIGTERM firefox; sleep 15
firefox -P "user" &
firefox -P "default settings" &

crontab(오전 3시에 실행):

0 3 * * * /usr/local/bin/firefox.sh

수동으로 실행하면 스크립트가 예상대로 작동합니다. 즉, Firefox 프로세스를 닫고 두 프로필을 자체 창에서 실행합니다.

cron이 스크립트를 실행하면 Firefox는 항상 닫힙니다.

답변1

cron작업은 일반적인 GUI 데스크탑 또는 터미널 환경과 격리된 완전히 독립적인 환경에서 실행됩니다.

firefox데스크탑 환경의 하위 프로세스로 실행되거나 최소한 유효한 DISPLAY변수 세트가 있어야 합니다.

때로는 cron 작업을 시작하거나 GUI 프로그램과 상호 작용하는 것이 가능합니다. export DISPLAY=:0.0스크립트의 두 번째 줄로 추가해 보세요 . 그래도 작동하지 않으면 :0.0데스크탑에서 터미널을 실행하고 실행하여 echo $DISPLAY올바른 값을 얻으십시오.

그래도 문제가 해결되지 않으면 액세스를 활성화하도록 설정 XAUTHORITY=$HOME/.Xauthority하거나 사용해야 할 수도 있습니다 xauth.

cron(firefox 포함)에서 실행되는 모든 프로그램은 cron의 최소한의 환경을 상속합니다. PATH, LOGNAME 및/또는 USER와 같은 변수는 예상과 다를 수 있으며 많은 변수가 전혀 설정되지 않습니다. 예를 들어, LC_* 로케일 변수가 설정되지 않을 수 있습니다(배포판에 따라 - 예: cron 읽기 /etc/environment및 Debian /etc/default/locale. Fedora에서도 해당되는지는 모르겠습니다). 프로그램이 특정 환경 변수를 특정 값으로 설정해야 하는 경우 이를 crontab 파일에서 설정하거나 export스크립트에서 설정해야 합니다. 또는 source스크립트에서 일반적으로 사용되는 쉘 시작 파일일 수도 있습니다 .

Firefox, Chromium 및 기타 웹 브라우저에서는 및 기타 프록시 관련 변수를 설정해야 할 수 http_proxy있습니다 https_proxy.


ssh -X참고로, GUI 프로그램 실행이 대략적으로 작동하는 방식은 다음과 같습니다 . 이 -X옵션은 X11 전달을 활성화합니다. SSH 연결을 통해 프록시 X 프로토콜에 대한 터널을 설정하고 DISPLAY 변수가 터널을 가리키도록 설정합니다.

예를 들어, xsane내 서버(HP3030 프린터/스캐너가 연결된 호스트 이름 "ganesh")에서 실행하고 있지만 내 워크스테이션 모니터에는 창을 표시하고 있습니다 ssh -X ganesh xsane.

실행하려면 ssh -X ganesh 'echo $DISPLAY'(작은따옴표가 필요하거나 로컬 쉘이 변수를 삽입하지 않도록 이스케이프해야 함) 다음과 같은 내용이 표시됩니다.

$ ssh -X ganesh 'echo $DISPLAY'
ganesh:11.0

관련 정보