Чому розміщення сценарію в /etc/cron.hourly не працює?


16

Я помістив виконуваний скрипт /etc/cron.hourly, але цей сценарій не запускався щогодини, насправді він ніколи не працює.

Ось сценарій (Hour-sound), який я зробив:

#! / бін / баш
mplayer ~ / Музика / sfx_msg -light.wv &> / dev / null &
spd-say -r -50 -p 50 -t male3 "Час зараз $ (дата +"% l% p ")"
notify-send "It:" "$ (дата +"% 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завдань з каталогу?
heemayl

Виконавча: так, запуск сценарію не вдається нічого поганого з каталогу /etc/cron.hourly, не знаю, як це перевірити? Це в програмах запуску? @heemayl
Чорний блок

1
Чи має /etc/crontabє файл рядок 17 * * * * root cd / && run-parts --report /etc/cron.hourly?
heemayl


1
Будь ласка , не публікується скріншоти тексту . Особливо, коли цей текст відображається у прозорому вікні терміналу і включає відволікаючі кольори.
тердон

Відповіді:


24

Як ви, напевно, бачили в коментарях до свого запитання, виконуючи роботи /etc/cron.hourly(та інші подібні каталоги) run-parts. run-partsтрохи прискіпливий до назви файлів. За замовчуванням він не виконує файли, чиї імена файлів містять що-небудь інше, ніж (усі з ASCII)

  • великі літери
  • букви нижнього регістру
  • цифр
  • підкреслює
  • тире ("мінусові знаки")

Тож якщо у вашому скрипті є ім'я файлу, наприклад "myscript.sh", воно просто ігнорується, оскільки run-partsкрапка не любить.


1- Ось мої файли: mediafire.com/view/rg8r85xb7qw26zs/cron.hourly_017.png 2- Ви пробували будь-який сценарій у /etc/cron.hourly і працювали з вами?
Чорний блок

2
Я щойно тестував літ-скрипт, який щойно написав "Привіт" у файл у / tmp, і він працював без проблем. Про всяк випадок ви знаєте, що сценарії в програмі /etc/cron.hourlyне обов'язково виконуються "в годину"? Якщо у вашої місії зайнято /etc/crontab17 хвилин, то сценарії виконуються в 00:17, 01:17 тощо. І знову на всякий вигляд, дозволи сценарію дозволяють користувачеві root виконувати їх?
Геннінг Кокербек

Так, але мій сценарій ніколи не працює. і про дозвіл дивіться тут: mediafire.com/view/psnb4bflawdly/…
Чорний блок

Можливо, це насправді проблема з дозволом. Я знаю, що в більш загальному сценарії /etc/cron.d/не повинно бути дозволів на запис або виконання для "групи" або "інших". "власник" потребує дозволу на виконання, "група" та "інші" повинні мати лише дозвіл на читання. Можливо, це стосується /etc/cron.hourlyі цього, хоча я цього не перевіряв.
Геннінг Кокербек

Добре, тоді я змінив дозвіл на мій файл mediafire.com/view/s2lq63u7z54ohbo/…, що робить групу, яка є кореневою групою, лише для читання та інших, тож чи це створить якісь проблеми?
Чорний блок

5

Одна з проблем полягає в тому, що ви намагаєтеся запустити графічну програму ( notify-send) з cron. Це потребує невеликого налаштування. Вам потрібно встановити XAUTHORITYі DISPLAYзмінні в crontab, щоб він міг підключитися до вашого запущеного X сеансу, і вам потрібно встановити XDG_RUNTIME_DIRтак, щоб він міг підключитися до вашого сеансу pulseaudio. На жаль, їх потрібно встановити в самому кронтабі, тому не можна користуватися /etc/cron.hourly. Замість цього запустіть crontab -eі додайте ці рядки:

DISPLAY=":0.0"
XAUTHORITY="/home/YOURUSERNAME/.Xauthority"
XDG_RUNTIME_DIR="/run/user/1000"

0 * * * * /path/to/script.sh 

Змініть значення XDG_RUNTIME_DIRна те, що повертається, коли ви echoїх отримуєте з терміналу. У моїй системі це:

$ echo $XDG_RUNTIME_DIR
/run/user/1001

Напевно, це буде те саме і у вас, але перевірте спочатку. Тепер ваш сценарій буде працювати щогодини і повинен працювати так, як очікувалося.


Це те , що ви маєте в виду mediafire.com/view/ucjpvu8b41n3hue / ... . це не спрацювало для мене.
Чорний блок

Я думаю, якщо проблема була в сповіщенні-відправці, чому тоді не працювала й інша команда (наприклад, mplayer)?
Чорний блок

@BlackBlock є кілька проблем. я) notify-sendпотребує XAUTHORITYі DISPLAYзмінні , які будуть встановлені і II) mplayerпотребує XDG_RUNTIME_DIRповинен бути встановлений. Ви спробували мою пропозицію? Це має вирішити обидва питання. Ви, ймовірно, також мали проблеми з іменуванням через run-partsпояснення в іншій відповіді.
тердон

Тоді чому це не спрацювало для мене? я буду злий! дивіться моє зображення в першому коментарі до вашої відповіді
Чорний блок

@BlackBlock ні! Ви редагуєте /etc/crontab, не робіть цього. Ви хочете, щоб це запускалося як ваш користувач, а не як root, і цей файл у будь-якому випадку має інший формат. Просто виконайте те, що я сказав у своїй відповіді, запустіть crontab -eі додайте туди рядки.
тердон

3

Сценарій, що закінчується на .sh, не виконується в /etc/cron.hourlyпапці:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=308911
Посилання або двійкові файли всередині каталогу, якими обробляються run-pars (наприклад /etc/cron.daily), не запускаються, якщо період є частиною їхнє ім'я.

перейменуйте сценарій

mv /etc/cron.hourly/Hour-sound.sh /etc/cron.hourly/Hour-sound

або ввести скрипт-дзвінок

/etc/crontab

що дозволяє .shзакінчення


1

Не використовуйте скрипт із розширенням (abc.sh) та додайте потрібне місце. (cron.hours).

додайте свої дані з коду до abc-файлу та збережіть. (для ваших потреб) (це має бути команда bash)

використання

sudo chmod +x abc

команда зробити виконуваний файл.

edit etc/cronrtab file

там заздалегідь визначено кілька рядків.edit від вашої лінії до хвилин і збережіть її.

тоді вона буде працювати належним чином.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.