У меня есть сервер, на котором запущен 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