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 проблема также наблюдалась.



Последнее исправление: Mapper720 (всего исправлений: 3)

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

Если да, то попробуй задавить вывод в расписании в 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 ★★★
()
Ответ на: комментарий от Mapper720

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

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

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

#!/bin/sh

date > /tmp/mytest.log

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

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

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

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