我正在尝试从/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 时发送消息。
谁能让我知道我在这里错过了什么。