【发布时间】:2021-06-12 21:12:35
【问题描述】:
好的,通常我不会那么容易放弃,但这个问题开始让我抓狂了 :-/
我有一个 BASH 脚本,可以将行插入到在 AWS 上的 Debian 服务器上运行的 SQLITE3 数据库中。默认用户是“admin”,当我运行脚本时,它成功地将行添加到数据库中。但是,可以通过在运行 Apache2 的同一台服务器上打开特定网页来运行完全相同的脚本,基本上是一个调用 bash 脚本的 cgi-bin 脚本。 Apache2 用户是“www-data”(所有 AWS Debian 和 Apache2 默认安装!)。
问题是:最终在同一个 SQLITE3 数据库、同一个表、同一个字段(它是同一个脚本!)中的数据并不相同!
在终端中以“admin”身份运行时,表中的“good”字符串如下所示:
“开垦土地”:与 3 号线的土著战斗升温……或
龙虾潜水员被“捕到鲸鱼嘴里”后幸存下来……
但是当 Apache2 通过网页启动脚本时,结果是这样的:
'''开垦土地''':与 3 号线的土著战斗升温……或
龙虾潜水员在“鲸鱼嘴里”被捕后幸存下来......
我知道 Apostrophe 需要“特殊”处理,但它是相同的脚本,它可以工作,也可以不工作。它必须是特定于用户的,但我不知道是哪个设置导致了这种情况。
我在 Apache 和 bash 脚本中“玩”了各种环境变量,但没有成功。
我尝试使用 bash 脚本启动
export LC_ALL="UTF-8"
export LANG="$LC_ALL"
并且我在/etc/apache2/envvars中更改了设置(下面是默认的,当然我更改设置后重启了Apache2):
## The locale used by some modules like mod_dav
export LANG=C
## Uncomment the following line to use the system default locale instead:
#. /etc/default/locale
附加信息:
cgi-bin 脚本使用 setsid 调用脚本:
setsid "/home/"$pathOnHost"/RSS/RSS_Control.sh" &> /dev/null &
这里的“环境”搞砸了吗?如果是这样,我该如何解决?
RSS_Control.sh 将值插入到数据库中,例如:
result_rowid=$( sqlite3 -cmd ".timeout "$sql_timeout "$RSS_DB_Filename" "insert into rss_titles ( Feed_ID, Published, Updated, Title, etc. ) \
values( \"$RSS_Feed_ID\", \"$RSS_Published\", etc.) ...
好吧,正如我所说,只要我在 bash 终端中手动启动它,一切都可以正常工作。通过浏览器启动/运行的相同脚本和代码-->Apache2-->cgi-bin-->bash 不能完美运行。有什么想法吗??
【问题讨论】:
-
也许首先要做的是拆分 pb,要么收集 pf 数据,要么插入 db ......让我们知道。
标签: bash sqlite debian apache2