首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在nix-shell中开始杀死后台进程。

在nix-shell中开始杀死后台进程。
EN

Unix & Linux用户
提问于 2018-08-22 11:32:26
回答 1查看 1.2K关注 0票数 4

我正在用环境工具和数据库开发一个简单的数据科学Python。当我输入nix-shell时,我会旋转数据库进程。当我离开环境的时候,我想把它降下来。

我如何使用trapnix来实现这一点?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-12-18 13:25:22

我一直在使用下面这样的东西:

./shell.nix.:

代码语言:javascript
复制
let
  pkgs = import  { };

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
  '';
}

./nix/客户

代码语言:javascript
复制
#! /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

如果没有其他nix会话仍在使用,EXIT陷阱将关闭数据库服务器。

票数 6
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/464106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档