Назад | Перейти на главную страницу

задание cron, выполняющее скрипт, не записывает в файл

У меня есть сервер, на котором запущен AIDE, и выполняемое задание cron выполняет сценарий bash и отправляет уведомление по электронной почте. Это все еще WIP, но я не могу заставить скрипт работать должным образом. Когда скрипт выполняется, мой выходной файл определяется здесь /sbin/aide --check > /tmp/$AIDEOUT по-прежнему пустой файл. Я даже пробовал простой /bin/echo "hello world" > /tmp/$AIDEOUT и это тоже не работает. В /tmp/$AIDEOUT файл остается пустым.

Однако, если я запустил этот сценарий вручную без использования Cron, он будет работать нормально.

Вот мой скрипт на bash

#!/bin/bash

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

MYDATE=`date +%Y-%m-%d`
AIDEOUT="AIDE-${MYDATE}.txt"
MAIL_TO=
ALLMATCH='All files match AIDE database. Looks okay!'
MAIL_FROM=

/bin/touch /tmp/$AIDEOUT
/bin/chmod 755 /tmp/$AIDEOUT
#/bin/echo "Aide check `date`" > /tmp/$AIDEOUT
/sbin/aide --check > /tmp/$AIDEOUT

if ! grep -q "$ALLMATCH" /tmp/$AIDEOUT; then
    /usr/bin/mailx -s "Daily AIDE report for $(hostname)-${ENVIRONMENT_NAME} ${AWS_REGION}" -r $MAILFROM $MAILTO  < /tmp/$AIDEOUT
fi

#/bin/rm /tmp/$AIDEOUT

/sbin/aide --update
/usr/bin/mv /var/lib/aide/aide.db.gz /var/lib/aide/db_backup/aide.db.gz-$(date +"%m-%d-%y")
/usr/bin/mv /var/lib/aide/aide.db.new.gz /var/lib/aide/aide.db.gz

мой cronjob определен в /etc/cron.d/aide */5 * * * * root /usr/local/etc/cron_aide2.sh

Спасибо!

Вы используете selinux. Если вы «setenforce 0» и затем позволите cron работать, вы получите ожидаемый результат. В корневой оболочке ваш контекст selinux:

неограниченный_у: неограниченный_р: неограниченный_т: s0-s0: c0.c1023

Но при запуске из Cron ваш контекст selinux начинается как:

system_u: system_r: system_cronjob_t: s0-s0: c0.c1023

Решение совершенно глупое. Вместо того:

/ sbin / aide --check> / tmp / $ AIDEOUT

использовать

/ sbin / aide --check 2> & 1 | кошка> / tmp / $ AIDEOUT

Я бы проверил, что ваш cron действительно работает. Вы можете заглянуть в / var / log / cron и посмотреть, есть ли для этого запись. Если нет, то, возможно, проверьте, что файл исполняемый. Если включен selinux, вы можете проверить журналы аудита.

Возможно, вспомогательный вывод на stderr, но не на stdout. Попробуйте перенаправить stderr

/sbin/aide --check 2> /tmp/$AIDEOUT

Или оба stdout и stderr

/sbin/aide --check 2>&1 /tmp/$AIDEOUT

https://stackoverflow.com/a/637834/205355