加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在 docker 容器中捕获信号

发布时间:2020-12-16 03:56:42 所属栏目:安全 来源:网络整理
导读:process.on('SIGTERM', 'shutting down...' 'use strict' span style="color: #0000ff"var http = require('http'span style="color: #000000"); span style="color: #0000ff"var server = http.createServer(span style="color: #0000ff"function span styl

process.on('SIGTERM','shutting down...'

'use strict'<span style="color: #0000ff">var http = require('http'<span style="color: #000000">);

<span style="color: #0000ff">var server = http.createServer(<span style="color: #0000ff">function<span style="color: #000000"> (req,res) {
res.writeHead(200,{'Content-Type': 'text/plain'<span style="color: #000000">});
res.end('Hello Worldn'<span style="color: #000000">);
}).listen(3000,'0.0.0.0'<span style="color: #000000">);

console.log('server started'<span style="color: #000000">);

<span style="color: #0000ff">var signals =<span style="color: #000000"> {
'SIGINT': 2<span style="color: #000000">,'SIGTERM': 15<span style="color: #000000">
};

<span style="color: #0000ff">function<span style="color: #000000"> shutdown(signal,value) {
server.close(<span style="color: #0000ff">function<span style="color: #000000"> () {
console.log('server stopped by ' +<span style="color: #000000"> signal);
process.exit(128 +<span style="color: #000000"> value);
});
}

Object.keys(signals).forEach(<span style="color: #0000ff">function<span style="color: #000000"> (signal) {
process.on(signal,<span style="color: #0000ff">function<span style="color: #000000"> () {
shutdown(signal,signals[signal]);
});
});

/app.js .//package.json ./,]

$ docker build --no-cache -t signal-app -f Dockerfile .

$ docker run -it -- -p : --name= signal-app

$ docker container --signal= my-app

#!/usr/bin/

/app.js .//app1. ./app1./package.json ./ +x ./app1.]

$ docker build --no-cache -t signal-app1 -f Dockerfile1 .

$ docker run -it -- -p : --name= signal-app1

$ docker container stop my- --signal= my-app1

#!/usr/bin/-pid=<span style="color: #800080">0<span style="color: #000000">

SIGUSR1-<span style="color: #000000">handler

my_handler() {
<span style="color: #0000ff">echo <span style="color: #800000">"<span style="color: #800000">my_handler<span style="color: #800000">"<span style="color: #000000">
}

SIGTERM-<span style="color: #000000">handler

term_handler() {
<span style="color: #0000ff">if [ $pid -ne <span style="color: #800080">0 ]; <span style="color: #0000ff">then
<span style="color: #0000ff">kill -SIGTERM <span style="color: #800000">"<span style="color: #800000">$pid<span style="color: #800000">"
<span style="color: #0000ff">wait <span style="color: #800000">"<span style="color: #800000">$pid<span style="color: #800000">"
<span style="color: #0000ff">fi<span style="color: #000000">
exit <span style="color: #800080">143; # <span style="color: #800080">128 + <span style="color: #800080">15 --<span style="color: #000000"> SIGTERM
}

setup handlers

on callback,<span style="color: #0000ff">kill the <span style="color: #0000ff">last background process,<span style="color: #0000ff">which is <span style="color: #0000ff"&gt;tail</span> -f /dev/<span style="color: #0000ff"&gt;null</span><span style="color: #000000"&gt; and execute the specified handler

trap <span style="color: #800000">'<span style="color: #800000">kill ${!}; my_handler<span style="color: #800000">'<span style="color: #000000"> SIGUSR1
trap <span style="color: #800000">'<span style="color: #800000">kill ${!}; term_handler<span style="color: #800000">'<span style="color: #000000"> SIGTERM

run application

node app &<span style="color: #000000">
pid=<span style="color: #800000">"<span style="color: #800000">$!<span style="color: #800000">"<span style="color: #000000">

<span style="color: #0000ff">wait<span style="color: #000000"> forever

<span style="color: #0000ff">while <span style="color: #0000ff">true
<span style="color: #0000ff">do
<span style="color: #0000ff">tail -f /dev/<span style="color: #0000ff">null & <span style="color: #0000ff">wait ${!<span style="color: #000000">}
<span style="color: #0000ff">done

/app.js .//app2. ./app2./package.json ./ +x ./app2.]

$ docker build --no-cache -t signal-app2 -f Dockerfile2 .

$ docker run -it -- -p : --name= signal-app2

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读