1분마다 알림을 보내도록 설정했는데,
$ crontab -l 1 * * * * /usr/bin/notify-send -t 0 "hello"
왜 작동하지 않나요? crontab 파일을 편집한 후 운영 체제를 다시 시작해야 합니까?
다음은 실행 중임을 의미합니까
cron
?$ ps aux | grep -i cron root 1038 0.0 0.0 23660 2420 ? Ss Apr20 0:00 cron
30초처럼 더 자주 일정을 지정할 수 있나요? 시간을 소수로 지정할 수 있나요?
0.5 * * * * /usr/bin/notify-send -t 0 "hello"
답변1
첫 번째 문제는 매분마다 작업을 실행하는 구문이 잘못되었다는 것입니다.
1 * * * * /usr/bin/notify-send -t 0 "hello"
첫 번째 필드의 1
의미는 작업이 매 시간마다 1분 동안만 실행된다는 의미입니다. 다음 1
에서 변경하십시오 *
.
* * * * * /usr/bin/notify-send -t 0 "hello"
두 번째 문제는 cron 작업이 매우 제한된 환경에서 실행된다는 것입니다. 내 시스템(Linux Mint)에서 설정된 유일한 환경 변수는 , $HOME
, $LOGNAME
, $PATH
및 $LANG
- $SHELL
일반적 으로 로 설정 됩니다 .$PWD
$PATH
"/usr/bin/:/bin"
최소한 설정이 없다는 것은 아무 것도 표시할 수 없다는 $DISPLAY
의미입니다 .notify-send
빠른 실험:
* * * * * DISPLAY=:0.0 notify-send "hello from crontab"
이로 인해 다음 오류가 발생했습니다.
(notify-send:18831): GLib-GObject-CRITICAL **: g_object_unref: assertion `G_IS_OBJECT (object)' failed
(저는 Gnome 데스크탑을 실행하고 있습니다.)
또 다른 실험에서는 전체 대화형 환경을 스크립트에 복사한 다음 모든 환경 변수를 명시적으로 설정하고 를 호출하도록 스크립트를 편집했습니다 notify-send
. 이제 매분마다 "crontab에서" 팝업이 표시됩니다.
나는 필요하지 않다고 확신한다모두대화형 환경에서 작동하도록 만들 수 있지만 정확히 어떤 환경 변수가 필요한지, 해당 값이 무엇인지는 알 수 없습니다. 현재 로그인 세션이 시작될 때 일부 필수 변수가 설정될 가능성이 높으며, 로그아웃했다가 다시 로그인하면 변경됩니다. 세부 정보는 사용 중인 데스크톱 환경에 따라 달라질 수도 있습니다.
이는 완전한 솔루션은 아니지만 시작점을 제공해야 합니다. 다른 사람이 관련 세부 정보를 추가할 수도 있습니다.
답변2
당신의 cron
직업은 거의 확실할 것이다예달리기. 그러나 GUI와 (쉽게) 상호 작용할 수 없으므로 cron
불행하게도 실패 notify-send
할 것입니다 .
다음과 같이 줄을 수정하여 작업이 cron
실행 중임 을 증명할 수 있습니다.crontab
1 * * * * ( date; notify-send /usr/bin/notify-send -t 0 "hello"; echo ) >>cron.log 2>&1
그러면 notify-send
날짜와 명령의 출력이 홈 디렉토리에 있는 로그 파일에 기록 됩니다 cron.log
.
그러나 귀하의 질문에서 복사한 대로 이는 매 시간의 첫 번째 1분( )에만 실행됩니다 1 * * * *
. 1분마다 실행하려면 * * * * *
("처음 1분" 대신 "매분")을 사용해야 합니다 . 이 점을 지적해주신 @KeithThompson에게 감사드립니다.
단위는 cron
1분입니다. 이보다 더 자주 작업을 실행해야 하는 경우 별도의 데몬을 사용하거나 cron
앞에 오는 행 중 하나를 고려할 수 있습니다 sleep 30
.
답변3
$ crontab -l
*/1 * * * * /usr/bin/notify-send -t 0 "hello"
1분마다 달리고 싶다면 cron
이것을 시도해 보세요.