Files
ChuSQL/scripts/csql-web.sh
T

71 lines
2.4 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
set -eu
# csql-web:先起独占数据目录的 server,再起 Web 服务,配置读 settings.toml。
home_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
bin="$home_dir/bin"
# 和在 Windows 的 csql-web.ps1(Start-Process -WorkingDirectory)保持一致:
# 先切到安装目录,配置里写相对的 log_files 才有确定的解析基准。
cd "$home_dir"
config_dir="${XDG_CONFIG_HOME:-$HOME/.config}/ChuSQL"
config="$config_dir/settings.toml"
[ -f "$config" ] || { echo "!! config not found: $config" >&2; exit 1; }
# 从配置里取某分区的一个值。
section_setting() {
awk -v section_key="$1" -v key="$2" -v def="$3" '
/^[[:space:]]*\[/ { section = $0; gsub(/[][[:space:]]/, "", section); next }
section != section_key { next }
{
line = $0
sub(/#.*/, "", line)
if (line ~ "^[[:space:]]*" key "[[:space:]]*=") {
sub(/^[^=]*=[[:space:]]*/, "", line)
gsub(/^[[:space:]]+|[[:space:]]+$/, "", line)
gsub(/^"|"$/, "", line)
print line
found = 1
exit
}
}
END { if (!found) print def }
' "$config"
}
server_exe="$bin/chusql-server"
web_exe="$bin/chusql-web"
[ -x "$server_exe" ] || { echo "!! server binary not found in $bin" >&2; exit 1; }
[ -x "$web_exe" ] || { echo "!! web binary not found in $bin" >&2; exit 1; }
# 监听地址与端口取 [web] 段,日志目录取 [storage] log_files(相对路径以安装目录为基准)。
host=$(section_setting web listen_host 127.0.0.1)
port=$(section_setting web port 7778)
log_setting=$(section_setting storage log_files ./logs)
case "$log_setting" in
/*) log_dir="$log_setting" ;;
*) log_dir="$home_dir/$log_setting" ;;
esac
mkdir -p "$log_dir"
# server 先起来:它进程内装入存储库、独占数据目录,Web 的存储请求都经它转发
"$server_exe" --config "$config" >>"$log_dir/server.log" 2>>"$log_dir/server.err.log" &
server_pid=$!
"$web_exe" --config "$config" >>"$log_dir/web.log" 2>>"$log_dir/web.err.log" &
web_pid=$!
# 退出时杀掉 web 与 server 进程。
cleanup() {
kill "$web_pid" "$server_pid" 2>/dev/null || true
wait "$web_pid" "$server_pid" 2>/dev/null || true
echo stopped.
}
trap cleanup INT TERM EXIT
echo "starting web ..."
echo "ready: http://$host:$port/"
echo "logs: $log_dir"
wait "$web_pid"