dmv*_*nna 4 trap background-process nix
我正在使用工具和数据库开发一个简单的数据科学环境。Python当我输入时nix-shell,我启动数据库进程。我想在退出环境时将其降速。
我该如何使用trap并nix实现这一目标?
我一直在使用类似以下的东西:
./shell.nix:
let
pkgs = import <nixpkgs> { };
in with pkgs; mkShell {
buildInputs = [ glibcLocales postgresql ];
shellHook = ''
export LANG=en_US.UTF-8
PGDATABASE=some-dbname \
PGDATA="$PWD/nix/pgdata" \
PGHOST="$PWD/nix/sockets" \
PGPORT="5433" \
PGUSER="$USER"
trap "'$PWD/nix/client' remove" EXIT
nix/client add
'';
}
Run Code Online (Sandbox Code Playgroud)
./nix/客户端
#! /usr/bin/env bash
set -eu
client_pid=$PPID
start_postgres() {
if postgres_is_stopped
then
logfile="$PWD/log/pg.log"
mkdir -p "$PGHOST" "${logfile%/*}"
(set -m
pg_ctl start --silent -w --log "$logfile" -o "-k $PGHOST -h ''")
fi
}
postgres_is_stopped() {
pg_ctl status >/dev/null
(( $? == 3 ))
}
case "$1" in
add)
mkdir -p nix/pids touch nix/pids/$client_pid
if [ -d "$PGDATA" ]
then
start_postgres
else
pg_ctl initdb --silent -o '--auth=trust' && start_postgres && createdb $PGDATABASE
fi
;;
remove)
rm nix/pids/$client_pid
if [ -n "$(find nix/pids -prune -empty)" ]
then
pg_ctl stop --silent -W
fi
;;
*)
echo "Usage: ${BASH_SOURCE[0]##*/} {add | remove}"
exit 1
;;
esac
Run Code Online (Sandbox Code Playgroud)
如果没有其他 nix-shell 会话仍在使用数据库服务器,陷阱EXIT将关闭数据库服务器。
| 归档时间: |
|
| 查看次数: |
1627 次 |
| 最近记录: |