Crontab на самом деле не работает от имени пользователя root, когда это должно быть?

У меня Ubuntu, и я работаю под пользователем «алекс». У меня есть следующий сценарий bash, работающий от имени пользователя root с crontab, однако он отправляет мне электронное письмо, и похоже, что он не работает правильно, поскольку результат отсутствует:

/dev/sda — Reallocated_Sector_Ct

Однако, если я запускаю задание crontab вручную из webmin, оно работает без проблем. Но когда он запланирован для запуска, тогда он терпит неудачу. Может быть, он действительно не работает как root?

Вот мой код:

#!/bin/bash
SMARTCHECK=`smartctl -a /dev/sda | grep "Reallocated_Sector_Ct" | awk 'NR==1 {print $10}'`
echo "/dev/sda - Reallocated_Sector_Ct is $SMARTCHECK"
if [ "$SMARTCHECK" != "0" ]; then
    mail -s "Failing: /dev/sda" alex <<< "/dev/sda - Reallocated_Sector_Ct is $SMARTCHECK"
fi

Спасибо!


person 2tails    schedule 11.01.2014    source источник
comment
как настроить запуск от рута? Это в crontab root, sudo без пароля, что-то еще?   -  person Marat    schedule 11.01.2014
comment
Первое предположение будет smartctl не на пути? И попробуй запустить команду с env -i из командной строки, она тогда работает?   -  person Wrikken    schedule 11.01.2014
comment
На это невозможно ответить, не зная, как вы настроили crontab.   -  person Keith Thompson    schedule 11.01.2014
comment
Спасибо, Wikken, похоже, мне пришлось добавить полный путь — теперь я запускаю /usr/sbin/smartctl. Я добавил этот crontab из webmin.   -  person 2tails    schedule 12.01.2014


Ответы (2)


Существует две возможности запуска скриптов с помощью cron:

  1. Вы используете системный crontab /etc/crontab. В этом случае они работают как root.
  2. Вы используете пользовательские crontab, которые доступны с помощью crontab -e. В этом случае они запускаются с правами пользователя, добавившего команду в свой crontab.
person Igor Chubin    schedule 11.01.2014
comment
А у пользователя root есть свой пользовательский crontab. Помните, что пользовательские crontab и системные crontab имеют разный синтаксис; последние указывают учетную запись (не обязательно root), под которой должна выполняться команда. - person Keith Thompson; 11.01.2014

больше возможных проблем в сценариях cronjob.

  • изменить все команды в скрипте с полным путем, особенно команду smartctl
  • проверьте, что в вашей системе есть /bin/bash, а не /usr/bin/bash, или установите cronjob как:

    0 * * * * ~/.profile;/usr/bin/bash YOUR_SCRIPT

  • проверьте почту в алекс аккаунте, если есть какие то сообщения об ошибках можно найти.

person BMW    schedule 11.01.2014