У меня есть этот простой скрипт

#!/bin/sh
ISUP=`sudo /etc/init.d/jboss7 status | grep running`
echo "ISUP: " $ISUP

если я запускаю его вручную, он работает нормально

[jboss@suc072-ipos ~]$ sh a.sh
ISUP:  JBoss AS 7.1.1 is running (pid 29125)

но если я запускаю его с помощью crontab, переменная будет пустой:O :(

* * * * * /home/jboss/a.sh > /home/jboss/a.log
[jboss@suc072-ipos ~]$ cat a.log
ISUP:

есть идеи как это исправить?

Linux Centos

[jboss@suc072-ipos ~]$ cat /etc/redhat-release
CentOS release 6.7 (Final)

1 ответ1

0

Если вы не настроили sudo для учетной записи, под которой выполняется задание cron, чтобы не требовать пароль, и вы также изменили /etc/sudoers чтобы закомментировать строку По Defaults requiretty и (возможно) добавили /etc/init.d/ в безопасную путь всегда будет неудачным, если он не будет интерактивным, как в случае cronjob.

Вместо этого, наиболее предпочтительным методом является настройка задания cron для запуска с правами root и удаление sudo из скрипта. Чтобы добавить cronjob, который будет работать от имени пользователя root, используйте команду:

sudo crontab -e

Добавьте cronjob так же, как вы делали это ранее.

Затем удалите sudo из скрипта, здесь с некоторыми другими незначительными изменениями / предложенными изменениями:

#!/bin/bash
ISUP="$(/etc/init.d/jboss7 status | grep running)"
echo "ISUP:  $ISUP"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .