Debian
sct(setcolortemperature)與cron的段錯誤
Debian 伸展使用者在這裡。我希望每十分鐘螢幕閃爍一次。在嘗試了幾個替代方案(包括
xrefresh
)後,我決定使用sct
. 它在 shell 中工作,但不適用於cron
.這有效:
sct 2000
**腳本:(**命名
colrefr
)#!/bin/bash PATH=/usr/bin sct 2000; sleep 3; sct
**Cron:(**顯示
pgrep cron
正在cron
執行)* * * * * /home/user/folder/colrefr
(每分鐘一次,直到調試成功)
我已經減輕了通常的陷阱 - 最後一個命令之後的換行符,
PATH
在腳本中設置,文件名中沒有點等等。$ which sct /usr/bin/sct $ which sleep /bin/sleep/
$ sudo tail -f /var/log/syslog Oct 16 16:00:01 user CRON[29060]: (user) CMD (/home/user/folder/colrefr ) Oct 16 16:00:01 user kernel: [229206.201351] sct[29062]: segfault at e0 ip 000055dca79aa8cd sp 00007ffd9dfc6220 error 4 in sct[55dca79aa000+2000] Oct 16 16:00:01 user kernel: [229206.201366] Code: 17 20 00 66 90 ff 25 4a 17 20 00 66 90 41 57 41 56 41 55 41 54 55 53 89 fb 31 ff 48 89 f5 48 83 ec 38 e8 ae ff ff ff 49 89 c4 <48> 63 80 e0 00 00 00 4c 89 e7 48 c1 e0 07 49 03 84 24 e8 00 00 00 Oct 16 16:00:01 user kernel: [229206.209280] sct[29064]: segfault at e0 ip 000055dcdd3268cd sp 00007ffdf60c9e40 error 4 in sct[55dcdd326000+2000] Oct 16 16:00:01 user kernel: [229206.209295] Code: 17 20 00 66 90 ff 25 4a 17 20 00 66 90 41 57 41 56 41 55 41 54 55 53 89 fb 31 ff 48 89 f5 48 83 ec 38 e8 ae ff ff ff 49 89 c4 <48> 63 80 e0 00 00 00 4c 89 e7 48 c1 e0 07 49 03 84 24 e8 00 00 00
我還有另外三個
cronjobs
,它們都有效。它在外殼中執行順利。
這是兩件事的結合:
- 你還沒有告訴程序你的 X 伺服器在哪裡。
- M. Unangst 的程序根本不進行錯誤檢查和處理。
該程序需要繼承一個
DISPLAY
在您的 crontab 或包裝腳本中指定的環境變數,以告訴它您要調整的 X 伺服器顯示在哪裡。如果沒有被告知,您看到的分段錯誤就是它的故障模式。您可能希望將此報告為錯誤。
您在使用的 shell 環境中碰巧有一個
DISPLAY
變數,可能是因為您使用的是 GUI 終端仿真器。如果您在非 GUI 環境中登錄,例如核心/使用者虛擬終端、真實終端或沒有 X11 轉發的 SSH 會話,當您以互動方式呼叫程序時也會看到相同的行為。% 顯示= sct zsh: 分段錯誤 DISPLAY= sct %
進一步閱讀
- https://sources.debian.org/src/setcolortemperature/1.3-1/sct.c/#L50
- https://unix.stackexchange.com/a/355177/5132
- https://unix.stackexchange.com/a/19238/5132
- https://unix.stackexchange.com/a/154453/5132
- https://unix.stackexchange.com/a/215151/5132
- https://bugs.debian.org/cgi-bin/pkgreport.cgi?archive=both;src=setcolortemperature