Linux (redhat); Crontab; bash - скрипт, работающий из оболочки, но не в Crontab - не удается назначить команду переменной

Я знаю, что мой вопрос задавали несколько раз, но для моей проблемы нет решения. В моей компании есть приложение, работающее на RedHat Mashine. Пользователи подключают к этому серверу текстовый графический интерфейс через ssh. Это приложение не поддерживает сброс пароля устаревания пароля.

Я создал сценарий, проверяющий время устаревания пароля и отправляющий электронное письмо каждому пользователю.

Скрипт работает нормально из оболочки, но не работает в crontab. Несколько тестов (touch testfile) показали, что crontab работает и все скрипты выполняются. Я проверил это с помощью простой команды echo в начале нового скрипта.

более глубокое исследование с помощью нескольких echo показало мне, что существует проблема с назначением команды переменной.

Это работало годами и в нескольких crontab.

 VAR = `ls`

Я тестировал другие версии:

VAR = $(ls)
VAR = `/bin/ls`
VAR = $(/bin/ls)

Фрагмент из скрипта:

(... generating user/email array ...)
echo "----------------START "$LOGDATE" ---------------" >> $LOGFILE

for ((i=0; i<${#USER[*]} ; i++))

do

USERNAME=${USER[$i]}

EMPFAENGERNAME=${EMPFAENGER[$i]}

TEMP1=`chage -l $USERNAME | grep 'Kennwort läuft ab'|cut -d ":" -f2`

(... sending email to user telling him to change password ...)

Crontab: (root)

00 12 * * 1-5 /root/pw_warning.sh

Этот скрипт настолько прост, он работает как root и с sudo, в нем нет ничего сложного, но я не понимаю что я делаю неправильно.

Обновление:

Протестировано PATH = (..) в crontab и в скрипте, как было предложено. Никаких изменений вообще.

Опять же: crontab работает и выполняет сценарии. Каждая команда в сценарии работает сама с собой, но не тогда, когда ее следует назначить переменной.

Обновление2: Добавление пути к оболочке не сработало:

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

Update3:

Рабочее решение:

0 0 * * * ssh root@localhost "/path/to/script"
0
задан 14 January 2016 в 12:58
1 ответ

Cron передает минимальный набор переменных среды вашим заданиям.

Распространенной ошибкой здесь является различие переменной среды PATH.

Чтобы обойти это, просто установите вашу собственную переменную PATH в верхней части скрипта. Например,

#!/bin/bash
PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# rest of script follows

Вы также можете установить переменную PATH в файле crontab, которая будет применяться ко всем заданиям cron. Например,

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

15 1 * * * backupscript --incremental /home /root

отсюда

Кроме того, судя по назначению переменных, которое вы используете, ваш скрипт не будет работать в / bin / sh , убедитесь, что ваша первая строка верна:

#!/bin/bash

Или лучше запустите свой сценарий как

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

, а не просто /path/to/script.sh

Наконец, вы можете попытаться поместить следующий хакерский код в свой crontab, поскольку он должен работать точно так же, как если бы вы запустили сценарий из оболочки:

 15 1 * * * ssh root@localhost "/path/to/script.sh"

Но проблема в вашем сценарии. Попробуйте использовать какой-нибудь шаблон сценария bash this или this , который должен устранить любые проблемы, связанные с назначением переменных.

1
ответ дан 4 December 2019 в 16:43

Теги

Похожие вопросы