работа crontab не работает

Backgound

Я пытаюсь запустить скрипт sh каждую минуту, используя crontab, но он не работает.

Проблема

Когда я запускаю скрипт вручную, он выполняется правильно, однако crontab не может этого сделать.

Я создал задание с помощью crontab -e, и я вижу, что cron запущен, потому что, если я набираю pgrep cron, я получаю PID в ответ.

Я также знаю, что мой формат времени правильный, потому что я тестировал его с помощью этого онлайн-тестера.

Код

wallpaperSlider.sh:

#!/bin/bash feh --randomize --bg-fill /home/username/Pictures/wallpapers/*

wallpaperSlider.sh :

SHELL=/bin/bash * * * * * username /home/username/.crons/wallpaperSlider.sh

Research

Я прочитал самые распространенные ошибки в AskUbuntu, и я не думаю, что я

Я понимаю, что, возможно, мне не хватает какой-либо переменной среды, но я не уверен, как это проверить.

Я также знаю, что crontab -e меняет / создает файл tmp, в моем случае /tmp/crontab.wCajAu/crontab.

Вопрос

Как я могу выполнить этот скрипт в cron? Имея в виду, что crontab -e изменяет файл в папке tmp, я потеряю все изменения после перезагрузки?
2
задан 28 July 2017 в 17:30

3 ответа

Ваш формат cron неверен. Вы хотите:

* * * * * /home/username/.crons/wallpaperSlider.sh

Пользовательские crontabs не имеют поля username. Это используется только для общесистемных crontab, таких как /etc/crontab. Вам также не нужно SHELL=/bin/bash, так как даже если ваша оболочка по умолчанию не bash (это dash на Ubuntu), ваш скрипт сам имеет строку shebang (#!/bin/bash), поэтому он будет запущен bash независимо от того, что запускает оболочка cron.

У вас, вероятно, будут другие проблемы, хотя, поскольку вы пытаетесь запустить приложение, которое общается с сервером X из cron. Если это так, вам нужно использовать:

DISPLAY=":0.0"
XAUTHORITY="/home/YOURUSERNAME/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
* * * * * /home/username/.crons/wallpaperSlider.sh
3
ответ дан 22 May 2018 в 20:04
  • 1
    Я обновил свой вопрос с дополнительной информацией, не стесняйтесь сообщить мне свои мысли! – Flame_Phoenix 28 July 2017 в 17:30
  • 2
    @Flame_Phoenix вы попробовали решение, которое я дал в своем ответе? И этот файл в tmp является только файлом tmp, он будет переименован и сохранен при сохранении и закрытии окна редактора, который открывается crontab -e. – terdon♦ 28 July 2017 в 17:31
  • 3
    Я только что сделал ! Это сработало! У меня как-то было ощущение, что я выбрал наименее интуитивное возможное решение ... как я должен был знать, что мне нужны эти конкретные переменные? И что мне все они нужны? Спасибо за помощь! – Flame_Phoenix 28 July 2017 в 17:33
  • 4
    @Flame_Phoenix вы не были :) Cron не был предназначен для запуска графического интерфейса, поэтому сделать его работу с GUI немного сложнее. Это основные переменные, необходимые для подключения процесса к вашему X-серверу. – terdon♦ 28 July 2017 в 17:35

Ваш формат cron неверен. Вы хотите:

* * * * * /home/username/.crons/wallpaperSlider.sh

Пользовательские crontabs не имеют поля username. Это используется только для общесистемных crontab, таких как /etc/crontab. Вам также не нужно SHELL=/bin/bash, так как даже если ваша оболочка по умолчанию не bash (это dash на Ubuntu), ваш скрипт сам имеет строку shebang (#!/bin/bash), поэтому он будет запущен bash независимо от того, что запускает оболочка cron.

У вас, вероятно, будут другие проблемы, хотя, поскольку вы пытаетесь запустить приложение, которое общается с сервером X из cron. Если это так, вам нужно использовать:

DISPLAY=":0.0" XAUTHORITY="/home/YOURUSERNAME/.Xauthority" XDG_RUNTIME_DIR="/run/user/1000" * * * * * /home/username/.crons/wallpaperSlider.sh
3
ответ дан 18 July 2018 в 09:30

Ваш формат cron неверен. Вы хотите:

* * * * * /home/username/.crons/wallpaperSlider.sh

Пользовательские crontabs не имеют поля username. Это используется только для общесистемных crontab, таких как /etc/crontab. Вам также не нужно SHELL=/bin/bash, так как даже если ваша оболочка по умолчанию не bash (это dash на Ubuntu), ваш скрипт сам имеет строку shebang (#!/bin/bash), поэтому он будет запущен bash независимо от того, что запускает оболочка cron.

У вас, вероятно, будут другие проблемы, хотя, поскольку вы пытаетесь запустить приложение, которое общается с сервером X из cron. Если это так, вам нужно использовать:

DISPLAY=":0.0" XAUTHORITY="/home/YOURUSERNAME/.Xauthority" XDG_RUNTIME_DIR="/run/user/1000" * * * * * /home/username/.crons/wallpaperSlider.sh
3
ответ дан 24 July 2018 в 19:21

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

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