cron 作业执行脚本未写入文件

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

谢谢!

答案1

您正在使用 selinux。如果您“setenforce 0”,然后让 cron 运行,您将获得预期的输出。在 root shell 中,您的 selinux 上下文是:

unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

但是从 Cron 运行时,您的 selinux 上下文启动为:

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

这个解决方案简直太愚蠢了。而不是:

/sbin/aide --检查 > /tmp/$AIDEOUT

使用

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

答案2

可能将输出输出到 stderr,而不是 stdout。尝试重定向 stderr

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

或者同时输出 stdout 和 stderr

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

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

答案3

我会验证您的 cron 是否确实在运行。您可以查看 /var/log/cron 并查看是否有该条目。如果没有,则可能验证该文件是否可执行。如果启用了 selinux,您可以检查审计日志。

相关内容