Сценарий bash обновляет обои в терминале, но не в cron [дубликат]

У меня должно быть слепое пятно, но я не могу найти, что это такое.

Я сделал небольшой скрипт на Python, который удаляет VLC из звукового меню. Он отлично работает, независимо от того, как я запускаю его с терминала или из программы запуска, или что угодно, о чем вы можете подумать.

На самом деле сценарий не более чем получает текущие настройки:

gsettings get com.canonical.indicator.sound interested-media-players

редактирует список и устанавливает измененный список с помощью:

gsettings set com.canonical.indicator.sound interested-media-players "['newlist']"

Эти команды выполняются сценарием python ,. Однако при запуске из cronjob ( crontab -e ) работает только часть gsettings - get - , но не gsettings - набор - раздел. Я проверил, что секция get отлично работает с cron, заставив скрипт записывать данные (как исходные, так и отредактированные) во внешний файл.

Это не проблема python

Чтобы увидеть, связана ли проблема с кодом python, я создал сценарий bash, который применяет измененный список элементов меню звука. История та же: сценарий bash отлично запускается из командной строки или средства запуска, не из cron, в то время как любая другая команда в том же сценарии будет работать нормально. Кроме того, если я добавьте любую команду в конец приведенного ниже скрипта, он работает нормально и похоже, что скрипт удовлетворен своей собственной работой.

Почему команда gsettings set не работает при запуске из cron?

Это сценарий:

#!/usr/bin/python3
import subprocess

def read_soundmenu():
    # read the current launcher contents
    get_menuitems = subprocess.Popen([
        "gsettings", "get", "com.canonical.indicator.sound", "interested-media-players"
        ], stdout=subprocess.PIPE)
    return eval((get_menuitems.communicate()[0].decode("utf-8")))

def set_current_menu(current_list): # this takes no effect from cron
    # preparing subprocess command string
    current_list = str(current_list).replace(", ", ",")
    subprocess.Popen([
        "gsettings", "set", "com.canonical.indicator.sound", "interested-media-players",
        current_list,
        ])

current_list = read_soundmenu()
for item in current_list:
    if item == "vlc.desktop":
        current_list.remove(item)
set_current_menu(current_list)
6
задан 23 February 2016 в 20:03

0 ответов

Другие вопросы по тегам:

Похожие вопросы: