LINUX.ORG.RU

Cron не срабатывает от рута

 , , ,


1

2

Мне нужно, чтоб в определённое время запускался некий скрипт с правами root. Что имеется сейчас:

sudo crontab -e

SHELL=/bin/sh

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

@reboot sleep 5; /home/mapper720/mountCrypt.sh

Первых двух строк (SHELL... и PATH...) изначально не было, они добавлены после прочтения очередного совета в интернетах, но ничего от этого не поменялось.

Пробовал @reboot заменить на * * * * *, но ни при перезагрузке, ни каждую минуту никакой скрипт не срабатывает (хотя при вызове вручную из консоли всё нормально).

В чём дело? Файлы /var/log/cron и /var/log/syslog, которые обычно призывают в такой ситуации изучать, в моей ОС (Manjaro) отсутствуют. Ранее в Xubuntu проблема также наблюдалась.

У тебя cron как демон (сервис) запущен вообще? Что ты как ребенок даже начальную диагностику не способен провести?

futurama ★★★★★ ()

sudo vim /etc/crontab

и не морочь голову

jo_b1ack ★★★★★ ()

Переделай на systemd юнит, без всяких этих захардкоженных слипов

zolden ★★★★★ ()

А при вызове скрипта вручную он даёт какой-то вывод в консоль?

Если да, то попробуй задавить вывод в расписании в crontab (и рекомендую править его через sudo crontab -e), добавив в хвост строки >/dev/null 2>&1, чтобы получилось

@reboot sleep 5; /home/mapper720/mountCrypt.sh >/dev/null 2>&1

P.S. Также рекомендуют (чтобы не было залипаний при попытке оповестить об ошибке по email) добавлять строку MAILTO="".

У меня crontab живёт и здравствует вот с таким содержимым:

MAILTO=""
45 13 * * sat /path/to/script.sh >/dev/null 2>&1
takamushi ()

unit напиши. типа этого:

vodka@vodka-PC:~$ cat /etc/systemd/system/firefox_update.service
[Unit]
Description=Service for update firefox
After=network.target

[Service]
Type=oneshot
ExecStart=/opt/firefox/firefox_update.py
User=root
Group=root

[Install]
WantedBy=multi-user.target

И таймер к нему:

cat /etc/systemd/system/firefox_update.timer
[Unit]
Description=Wait some second before run foo

[Timer]
OnActiveSec=5sec
AccuracySec=1s

[Install]
WantedBy=timers.target

Типа этого. Потом

systemctl daemon-reload
systemctl enable firefox_update.timer
systemctl list-timers

Написал примерно, может что подправить надо будет.

iljuase ★★★ ()
Последнее исправление: iljuase (всего исправлений: 1)
Ответ на: комментарий от iljuase

Можно без таймера.

Просто unit:

[Unit]
Description=Service for update firefox
After=network.target

[Service]
Type=oneshot
ExecStart=/opt/firefox/firefox_update.py
User=root
Group=root

[Install]
WantedBy=multi-user.target

И в сам скрипт (типа /opt/firefox/firefox_update.py вставляешь свой sleep)

iljuase ★★★ ()
Ответ на: комментарий от mord0d

Крайне не рекомендую делать & в crontab.

Понятно. Походу, тебя тоже предупредили FreeBSD, что отправка данных в /dev/null/ перегревает процессор :)

Clockwork ★★ ()
Ответ на: комментарий от Mapper720

но ни при перезагрузке, ни каждую минуту никакой скрипт не срабатывает

Впиши в кронтаб простейший скрипт, чтобы убедиться что с кроном нет проблем

* * * * * /path/to/mytest.sh

#!/bin/sh

date > /tmp/mytest.log

Убедись что появился файл /tmp/mytest.log

Тогда можно будет перейти к дебагу под кроном твоего скрипта

P.S. перенеси sleep 5 в сам скрипт

futurama ★★★★★ ()
Последнее исправление: futurama (всего исправлений: 2)

Возможно проблема с локалью, попробуй

* * * * * LANG=en_US.UTF-8 /path/to/script

NightCat ()
@reboot sleep 5; bash -x /home/mapper720/mountCrypt.sh >/var/log/mountCrypt.log 2>&1



А потом читать что написано в /var/log/mountCrypt.log

slowpony ★★★ ()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.