내 그놈 데스크탑에서 배경과 화면 보호기를 변경하는 스크립트가 있습니다. 수동으로 실행하면 잘 작동하지만 cron에 넣으면 실행되지 않습니다. 파일이 실행 가능합니다.
크론 작업을 추가했습니다.크론탭 -e.
스크립트는 다음과 같습니다.
#!/bin/bash
# change_background - Change desktop background and lockscreen background randomly
# Export DBUS_SESSION_BUS_ADDRESS environment variable
euid=$(id --real --user)
pid=$(pgrep --euid $euid gnome-session)
export DBUS_SESSION_BUS_ADDRESS=$(grep -z DBUS_SESSION_BUS_ADDRESS /proc/$pid/environ|cut -d= -f2-)
# Wallpapers directory
dir="/home/myuser/Pictures/Wallpapers"
# Wallpaper and screensaver files
background=$(ls $dir/* | shuf -n1)
screensaver=$(ls $dir/* | shuf -n1)
# Set the wallpaper and screensaver
gsettings set org.gnome.desktop.background picture-uri file://$background
gsettings set org.gnome.desktop.screensaver picture-uri file://$screensaver
내 스크립트는 내 bin 디렉토리에 있습니다./홈/myuser/빈PATH 변수에 추가됩니다.
크론탭 -l산출:
# ┌───────────── minute (0 - 59)
# │ ┌───────────── hour (0 - 23)
# │ │ ┌───────────── day of month (1 - 31)
# │ │ │ ┌───────────── month (1 - 12)
# │ │ │ │ ┌───────────── day of week (0 - 6) (Sunday to Saturday;
# │ │ │ │ │ 7 is also Sunday on some systems)
# │ │ │ │ │
# │ │ │ │ │
# * * * * * command
#
# --- Change background every minute --- #
#
* * * * * change_background
#
# --- ------------------------------ --- #
내 질문은 cron이 내 스크립트를 실행하지 않는 이유는 무엇입니까? 내가 뭘 잘못했나요?
답변1
질문있는 것 같다crontab의 환경이 올바르게 설정되지 않아 PATH
스크립트를 찾을 수 없습니다. 사용자의 셸 초기화 파일은 cron에 의해 실행되지 않으므로 해당 파일 PATH
의 설정이나 기타 변수는 cron 작업에 쓸모가 없습니다.
이 문제는 여러 가지 방법으로 해결될 수 있습니다.
PATH
하나는 crontab에서 간단히 설정(및 특정 값이 필요한 다른 변수)하는 것입니다 (이렇게 하면 스크립트에 대한 해당 변수의 값도 변경됩니다.다른 모든 직업크론탭에서):
PATH=/home/myuser/bin:$PATH
다른 하나는 절대 경로를 사용하여 스크립트를 실행하는 것입니다.
* * * * * /home/myuser/bin/change_background
실행 중인 다른 작업에서 PATH
스크립트 자체가 사용하는 특정 항목에 대해 변수를 개별적으로 수정해야 하는 경우(이는 PATH
스크립트 자체에서 초기에 설정되거나 예를 들어 로 시작됨 ) env PATH=... /some/path/program
더 나은 옵션일 수 있습니다 .
답변2
노력하다:
* * * * * env DISPLAY=:0 /path/to/bash/script.sh