Я вставил исполняемый скрипт /etc/cron.hourly
, но этот скрипт не запускался каждый час, на самом деле он никогда не запускался вообще.
Вот сценарий (Часовой звук), который я сделал:
#! / Bin / Баш mplayer ~ / Music / sfx_msg-highlight.wv &> / dev / null & spd-say -r -50 -p 50 -t male3 "Время сейчас равно $ (date +"% l% p ")" notify-send "It's:" "$ (date +"% l% p ") сейчас." -i ~ / Картинки / "first tee.png" -t 5000
Мой crontab это:
DISPLAY=":0.0"
XAUTHORITY="/home/naruto/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"
0 * * * * /home/naruto/Hour-sound.sh
Хотя mplayer
и spd-say
команды выполняются правильно, то notify-send
нет. Я также попытался перенаправить ошибку в файл:
0 * * * * /home/naruto/Hour-sound.sh 2>/tmp/error
Но это не показало результатов. Что я делаю неправильно?
/etc/crontab
имеетrun-parts
линию для запуска почасовойcron
работы из каталога?/etc/crontab
файле есть строка17 * * * * root cd / && run-parts --report /etc/cron.hourly
?Ответы:
Как вы, вероятно, видели в комментариях к вашему вопросу, cronjobs в
/etc/cron.hourly
(и других аналогичных каталогах) выполняютсяrun-parts
.run-parts
немного требователен к именам файлов. По умолчанию он не выполняет файлы, имена файлов которых содержат что-либо кроме (все из ASCII)Так что если у вашего скрипта есть имя файла, например «myscript.sh», он просто игнорируется, потому
run-parts
что не любит точку.источник
/etc/cron.hourly
не обязательно выполняются "в час"? Если у вашего cronjob in/etc/crontab
17 минут, сценарии выполняются в 00:17, 01:17 и так далее. И снова на всякий случай, разрешения скрипта позволяют пользователю root выполнять их?/etc/cron.d/
смысле не должны иметь разрешения на запись или выполнение для «группы» или «других». «Хозяин» должен иметь разрешение на выполнение, «группа» и «другие» должны иметь только разрешение на чтение. Может быть, это относится и к этому/etc/cron.hourly
, хотя я не проверял это.Одна проблема заключается в том, что вы пытаетесь запустить графическое приложение (
notify-send
) из cron. Это требует небольшой настройки. Вам необходимо установитьXAUTHORITY
иDISPLAY
переменные в crontab,XDG_RUNTIME_DIR
чтобы он мог подключаться к вашему текущему сеансу X, и вам нужно установить его, чтобы он мог подключаться к вашему сеансу pulseaudio. К сожалению, они должны быть установлены в самом crontab, поэтому вы не можете их использовать/etc/cron.hourly
. Вместо этого запуститеcrontab -e
и добавьте эти строки:Измените значение
XDG_RUNTIME_DIR
на то, что возвращается, когда выecho
их из терминала. В моей системе это:Вероятно, так же будет и у вас, но сначала проверьте. Теперь ваш скрипт будет запускаться каждый час и должен работать как положено.
источник
notify-send
нуждаетсяXAUTHORITY
иDISPLAY
переменные , которые будут установлены и II)mplayer
нуждается вXDG_RUNTIME_DIR
должен быть установлен. Ты попробовал мое предложение? Это должно исправить обе проблемы. У вас, вероятно, также были проблемы с именами из-за того,run-parts
как объяснено в другом ответе./etc/crontab
, не делайте этого. Вы хотите, чтобы он запускался от имени пользователя, а не от имени пользователя root, и этот файл в любом случае имеет другой формат. Просто сделайте то, что я сказал в своем ответе, запуститеcrontab -e
и добавьте туда строки.Скрипт, заканчивающийся на
.sh
, не выполняется в/etc/cron.hourly
папке:переименовать скрипт
или поместите скрипт-вызов в
который позволяет
.sh
окончаниеисточник
Не используйте скрипт с расширением (abc.sh) и добавьте нужное место. (cron.hours).
добавьте ваш код в файл abc и сохраните. (для ваших нужд) (это должна быть команда bash)
использование
Команда для создания исполняемого файла.
там есть несколько предопределенных строк: от минуты до часа и сохраните их.
тогда он будет работать правильно.
источник