AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题

问题[signals](server)

Martin Hope
leedm777
Asked: 2020-07-25 09:34:06 +0800 CST

如何在不影响重启策略的情况下向 Docker 容器发送信号?

  • 3

TIL 这docker kill意味着“让它死”意义上的杀戮,而不是 POSIX 意义上的“发送信号”。

我们有几个容器需要发送一个SIGHUP来重新加载配置,但这会导致它们忽略“总是”的重启策略,这不是我们想要的。

在不影响其自动重启能力的情况下向这些容器发送信号的最佳方式是什么?


为了更清楚地展示我们所看到的问题,请看以下示例。

我们有一些容器的重启策略设置为始终

$ docker inspect cloudwatch-exporter | jq .[].HostConfig.RestartPolicy
{
  "Name": "always",
  "MaximumRetryCount": 0
}

我们在某个时候使用以下命令重新加载配置docker kill:

$ docker kill --signal=SIGHUP cloudwatch-exporter
cloudwatch-exporter

一段时间后,发生了一些事情,导致进程终止。为了模拟这一点,我将在容器内发送一个信号:

$ docker exec cloudwatch-exporter bash -c "kill 1"

此时,容器已死,不会重新启动:

$ docker ps -a | grep cloudwatch-exporter
c7827204bba5        prom/cloudwatch-exporter:cloudwatch_exporter-0.8.0                                "java -jar /cloudwat…"   20 hours ago        Exited (143) 3 minutes ago                            cloudwatch-exporter

我们有什么替代品可以使用docker kill?在许多情况下docker exec有效,但它不适用于仅包含单个静态链接二进制文件的任何容器。

signals docker
  • 2 个回答
  • 2032 Views
Martin Hope
Jakub Kuszneruk
Asked: 2020-05-07 04:55:22 +0800 CST

让 systemd 服务稍后停止,而不会阻塞 `systemctl stop`

  • 2

我有一堆服务负责运行队列中消耗的操作。

我希望能够轻轻地重新启动服务(不中断已经运行的操作)

可以通过处理 systemd 发送的 SIGTERM 并保存程序在当前操作处理后应该退出的信息来解决。
还有一个小问题是,在服务配置文件中定义的一段时间后,TimeoutStopSecsystemd 将发送额外的 SIGKILL 以残酷地终止我的进程。
我可以通过设置轻松避免它TimeoutStopSec=infinity。然后systemctl stop'将等到脚本自行终止,这可能会持续一个多小时,并导致我遇到主要问题。

我不希望systemctl命令等到脚本结束

看起来SendSIGKILL=no配置完成了这项工作。SIGTERM这导致在之后重试TimeoutStopSec,然后创建新的工作人员,并让旧的工作人员继续运行。

journalctl 日志

May 06 14:14:43 jaku systemd[1]: Stopping Jaku test worker...
May 06 14:14:43 jaku python3[31597]: * 15 <frame object at 0x14d8108>
May 06 14:14:53 jaku systemd[1]: jaku-test-worker.service: State 'stop-sigterm' timed out. Skipping SIGKILL.
May 06 14:14:53 jaku python3[31597]: * 15 <frame object at 0x14d8108>
May 06 14:15:03 jaku systemd[1]: jaku-test-worker.service: State 'stop-final-sigterm' timed out. Skipping SIGKILL. Entering failed mode.
May 06 14:15:03 jaku systemd[1]: jaku-test-worker.service: Failed with result 'timeout'.
May 06 14:15:03 jaku systemd[1]: Stopped Jaku test worker.
May 06 14:15:03 jaku systemd[1]: jaku-test-worker.service: Found left-over process 31597 (python3) in control group while starting unit. Ignoring.
May 06 14:15:03 jaku systemd[1]: This usually indicates unclean termination of a previous run, or service implementation deficiencies.
May 06 14:15:03 jaku systemd[1]: Started Jaku test worker.
jaku@jaku:/nfs/home/jaku/tmp$ ps aux | grep "sig.py"
jaku     31597 99.9  0.0  31884  9916 ?        Rs   14:00  15:10 /usr/bin/python3 /home/jaku/tmp/sig.py
jaku     32359  100  0.0  31884 10032 ?        Rs   14:15   0:43 /usr/bin/python3 /home/jaku/tmp/sig.py
jaku     32483  0.0  0.0  15968  1040 pts/7    S+   14:15   0:00 grep --color=auto sig.py

解决方案看起来像是在做它的工作,但我很担心这句话:

这通常表示先前运行的不干净终止,或服务实现缺陷。

我错过了什么或者它真的是最好的解决方案吗?

参考:

  • 系统服务
  • systemd.kill。
python signals systemd
  • 3 个回答
  • 6187 Views
Martin Hope
deadkarma
Asked: 2012-10-04 08:32:38 +0800 CST

在进程上使用 SIGCONT 通常安全吗?

  • 6

我有许多守护进程有时会在数据库事务期间挂起,从而阻止其他查询(并造成一般性破坏)

为了进行调试,我在守护进程中添加了一些代码,以便在向其发送 SIGCONT 信号时转储堆栈跟踪。

在未停止的进程上捕获 SIGCONT 通常安全吗?

如果未设置为捕获它,我想使用一个不会终止进程的信号

signals
  • 1 个回答
  • 382 Views
Martin Hope
Noah Campbell
Asked: 2010-03-10 11:52:22 +0800 CST

我被信号 15 杀死。当我使用 svn 时

  • 17

我正在使用 svn+ssh,我看到了一些:

Killed by signal 15.

在一个svn up.

有什么想法吗?

svn ssh signals
  • 4 个回答
  • 16061 Views
Martin Hope
Bribles
Asked: 2009-07-07 13:16:44 +0800 CST

PostgreSQL 进程及其响应的信号

  • 0

对于 PostgreSQL 8.3 及更高版本,构成服务器并响应查询的进程是什么?

各种过程对什么信号作出反应,这些信号有什么作用?

应该或不应该发送哪些信号以及何时应该或不应该使用它们的指导方针是什么?

linux process postgresql kill signals
  • 2 个回答
  • 1523 Views
Martin Hope
Dennis Williamson
Asked: 2009-05-06 21:49:07 +0800 CST

如何在工作中使用符号信号?

  • 0

在这个关于 SO 的答案中,我给出了一个应该在提交到at的作业中使用 -SIGCONT 信号的示例。但是,我发现我用 -SIGSTOP 停止的进程没有继续。当我将信号更改为数值时,它起作用了。

echo "kill -18 $rspid"|at now + 2 minutes

使用数值是个坏主意,因为它在不同的系统上可能会有所不同。

如何使用符号信号 (-SIGCONT) 而不是数字信号 (-18) 提交此作业?

linux unix shell signals at
  • 2 个回答
  • 245 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve