crontab은 배경을 변경하는 스크립트를 실행하지 않습니다.

crontab은 배경을 변경하는 스크립트를 실행하지 않습니다.

내 그놈 데스크탑에서 배경과 화면 보호기를 변경하는 스크립트가 있습니다. 수동으로 실행하면 잘 작동하지만 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 

관련 정보