无法从 apache httpd 调用 shell 脚本



我正在尝试从/etc/httpd/sites-available 中的 000-default.conf 调用 shell 脚本。

000-default.conf 文件内容是:

<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html/
CustomLog "| sh /scratch/user/test.sh" custom_user_tracking
</VirtualHost>

我的/etc/httpd/conf/httpd.conf 添加了以下内容:

ServerName localhost
LogFormat "%t [%h] [%m] [%U] [%B] [%b] [%D] [%q] [%s] [%{Referer}i] [%{User-Agent}i]" custom_user_tracking
IncludeOptional sites-enabled/*.conf
IncludeOptional sites-available/*.conf

我在/var/www/html/中保留了一个虚拟的 html 文件 索引内容.html:

<!DOCTYPE html>
<html>
<body>
<h1>Hello World!</h1>
</body>
</html>

每当我点击 http://localhost:80 时,根本不调用 shell 脚本。shell脚本是可执行的,它只打印"Hello World"。

但是当我从 000-default.conf 文件调用 apache kafka 二进制文件时,它可以正常工作。

修改的 000-default.conf 文件:

<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html/
CustomLog "| [HOME_DIR_KAFKA]/bin/kafka-console-producer.sh --topic access-log --broker- list <Remote_host_ip>:9092" custom_user_tracking
</VirtualHost>

现在,当我单击 http://localhost:80 消息时,消息将在远程kafka服务器中发送。

任何人都可以在这里提供帮助,如何从 apache httpd 调用 shell 脚本?

考虑使用"shebang" ($!( 而不是使用 sh,使 test.sh 脚本可执行。

000-default.conf :
CustomLog "| /scratch/user/test.sh" custom_user_tracking
/scratch/user/test.sh   
#! /bin/sh
...

或者使用完整路径运行"sh" 自定义日志 "|/bin/sh/scratch/user/test.sh" custom_user_tracking

另外,仔细检查/scratch/user/test.sh 上的执行权限,以及文件夹的权限。 https 通常以非特权帐户运行。

以下是send_message.sh的内容:

#! /bin/sh

PRIVATE_KEY=$1
HOST=$2
TOPIC_NAME=$3
MESSAGE=$4
echo "OCI VM IP : $HOST"
echo "PRIVATE KEY : $PRIVATE_KEY"
echo "TOPIC-NAME: $TOPIC_NAME"
echo "MESSAGE: $MESSAGE"
## Run Cmd in vm
ssh -o "StrictHostKeyChecking no" -i $PRIVATE_KEY opc@$HOST /bin/bash << EOF
sudo su
echo $MESSAGE | [HOME_DIR]/bin/kafka-console-producer.sh --broker-list [VM_IP]:9092 --topic $TOPIC_NAME
EOF 

和/etc/httpd/sites-available/000-dafult.conf 的内容

<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www/html/
CustomLog "| /home/opc/send_message.sh /home/opc/dev2oci.key 100.111.69.61 access-log apache-httpd" custom_user_tracking
</VirtualHost>

消息以 topi access_log 发送,间隔为 5 秒。尽管 http://localhost:80 不是从浏览器触发的。

如果我用以下条目替换自定义日志:

CustomLog "| [HOME_DIR]/bin/kafka-console-producer.sh --topic access-log --broker-list [VM_IP]:9092" custom_user_tracking

然后在从浏览器触发 http://localhost:80 时发送消息。

谁能让我知道我在这里错过了什么。

最新更新