supervisor杀死不掉程序的问题分析

项目场景:

supervisor可以说是linux上大名鼎鼎的守护进程工具了,它的易用性在我所有用过的工具里算是排名前列的。但在使用过程中也不免会出一些问题,很多都是设置错误导致的。


问题描述

使用java启动一个jar,调用stop的时候jar程序还是留存在后台。


原因分析:

这并不是supervisor的bug,也不是你的程序写的有问题。由于很多java项目都需要初始化很多变量,很多人选择了在shell里面导出环境变量,然后在shell里面启动java程序。

这样导致一个问题,supervisor守护进程守护的不是你的jar,而是你用来初始化环境变量的shell脚本。所以导致了stop之后java程序留存后台的问题。


解决方案:

这可能也是supervisor的运作机制导致的,如果你不用初始化变量,你就直接在command里面启动jar就行了,如果你你必须初始化变量不如使用supervisor自带的environment字段配置变量。

下面是错误的写法:

xf.conf

[program:xf]
directory=/home/anold/XTTS
command=bash xf_tts.shautostart=true
autorestart=true
user=root
redirect_stderr=true
stdout_logfile = /home/anold/XTTS/starts.log
stdout_logfile_maxbytes = 50MB
staout_logfile_backups = 5

xf_tts.sh

#!/bin/bashexport LD_LIBRARY_PATH=/home/anold/XTTS/libs:$LD_LIBRARY_PATHecho "LD_LIBRARY_PATH: $LD_LIBRARY_PATH"
echo "Directory: " && pwdjava -jar xf_tts_demo-1.0-SNAPSHOT.jar

上面的写法会在supervisorctl调用stop之后杀死xf_tts.sh而不是xf_tts_demo-1.0-SNAPSHOT.jar,因为xf_tts.shxf_tts_demo-1.0-SNAPSHOT.jar的父进程,当父进程被杀死,子进程就成了孤儿进程最终被systemd托管,所以可以一直存活,直到自己崩溃为止!

下面是正确的写法:

[program:xf]
directory=/home/anold/XTTS
command=java -jar xf_tts_demo-1.0-SNAPSHOT.jar
autostart=true
autorestart=true
user=root
redirect_stderr=true
stdout_logfile = /home/anold/XTTS/starts.log
stdout_logfile_maxbytes = 50MB
staout_logfile_backups = 5
environment=LD_LIBRARY_PATH="/home/anold/XTTS/libs",NAME="anold"

environment里面配置的环境变量会代入subprogress,这样你可以在command里面读取到。这样就同时解决了环境变量和程序杀不死的问题。

总结:

supervisor这个工具用好很重要,我觉得是linux必不可少的神器。但是,神器有时候有它自己的脾气。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/202197.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

推荐一款Excel快速加载SQL的插件,方便又好用

如果告诉你只需要双击一下,SQL数据库中存放在表里面的数据,就能加载到你的Excel中,你想不想要? 今天给大家推荐一款好用的Excel插件,安装简单,使用方便,是经常使用SQL数据库的不二。 这款插件…

Web开发学习HTTP协议、通过浏览器控制台学习HTTP协议。

文章目录 HTTP协议1.HTTP协议是什么?2.HTTP协议的特点3.什么是URL?4.通过浏览器控制台学习HTTP协议Request Headers请求数据格式说明Response Headers请求数据格式说明 5.HTTP工作原理 HTTP协议 1.HTTP协议是什么? HTTP协议是一种超文本传输协议&…

前端实现主题(深色模式)切换的几种方案

方案一:link 动态引入 通过改变link 标签的 href 属性实现动态修改样式(暂不推荐这种方案) 优点:实现了按需加载,提高了性能; 缺点:动态加载样式文件,可能会因为网络问题导致样式…

使用Scanner扫描器和if语句来判断QQ等级的活跃程度

一、主要特点 总体使用try包围起来,用到了Scanner扫描器,还用到了若干if语句。 二、运行代码 import java.util.Scanner; public class QQtest {public static void main(String[] args){try (Scanner scan new Scanner(System.in)) {System.out.pr…

torch 如何实现两点分布采样,100个样本中20个样本为1,80个为2

方法1 可以使用 PyTorch 中的 torch.distributions 模块实现两点分布采样。具体来说,可以使用 Categorical 分布将数字1和数字2的概率分别设为0.2和0.8,然后调用 sample() 方法进行采样。 下面是实现上述功能的代码示例: import torch # 创…

rename--统一的PRF

将ARF/PRF进行合并,合同之后的不见,称之为统一的PRF(Physical Register File);存储的是speculative的,以及正确的(retire)寄存器值;

【已解决】Qt mouseMoveEvent、mouseReleaseEvent失效无法触发

问题背景 我有一个派生自QGraphicsObject的类,这个类其实就是同时继承了QGraphicsItem和QObject的类 相当于在QGraphicsItem的基础上增加了事件消息的功能 我派生出来的这个类主要是实现了由多个点组成的多边形 现在想实现一个功能,拖动其中的某个点…

吉利护航,宣称比友商“更懂车”,魅族造车的底气与底色

继小米、华为后,又一家手机厂商宣布跨界造车。 在近日举办的2023魅族秋季无界生态发布会上,星纪魅族集团(下称“魅族”)董事长兼CEO沈子瑜宣布,魅族正式进入汽车市场,将在2024年第一季度启动“DreamCar共创…

promise使用示例

下面是一个 Promise 使用示例,通过 Promise 实现异步操作的链式调用: const getUser (userId) > {return new Promise((resolve, reject) > {// 模拟异步请求setTimeout(() > {const users [{ id: 1, name: Alice },{ id: 2, name: Bob },{ …

按需分发饼干

题意: 假设你是一位很棒的家长,想要给你的孩子们一些小饼干。但是,每个孩子最多只能给一块饼干。 对每个孩子 i,都有一个胃口值 g[i],这是能让孩子们满足胃口的饼干的最小尺寸;并且每块饼干 j&#xff0c…

ChatGPT学习笔记

1 模型训练 ChatGPT在训练时使用了PPO方法;

【STM32】STM32学习笔记-课程简介(01)

00. 目录 文章目录 00. 目录01. 课程简介02. 硬件设备03. 软件工具04. 硬件套件4.1 面包板和跳线/飞线4.2 杜邦线和STM32最小系统板4.3 STLINK和OLED显示屏4.4 LED和按键4.5 电位器和蜂鸣器4.6 传感器和旋转编码器4.7 USB转串口和MPU60504.8 Flash闪存和电机模块4.9 SG90舵机 0…

win10与 vm虚拟机win7共享文件夹创建

1:在win10(主机)电脑先随意共享一个文件夹 2:在win10(主机)上创建一个网络映射 右键此电脑选择映射网络驱动器 成功后会多出这个网络位置 3:win7虚拟机设置 在虚拟机中点击计算机右键添加一个网络位置

C# Onnx CenterNet目标检测

目录 效果 模型信息 项目 代码 下载 效果 模型信息 Inputs ------------------------- name:input.1 tensor:Float[1, 3, 384, 384] --------------------------------------------------------------- Outputs ------------------------- name&a…

安卓开发引入网络图片

<ImageViewandroid:id"id/img01"android:layout_width"match_parent"android:layout_height"200dp"android:layout_weight"1"/>ImageView加载网路图片 第一步&#xff1a;添加网络权限 <uses-permission android:name"…

vue使用实现录音功能js-audio-recorder

前言 最近项目中需要实现一个录音上传功能&#xff0c;用于语音评论可以上录音。 下载插件&#xff1a; npm i js-audio-recorder完整代码 <template><div style"padding: 20px;"><h3>录音上传</h3><div style"font-size:14px"…

“轻松管理视频文件:高效归类与统一重命名“

随着电子设备的普及&#xff0c;我们的视频文件可能来自各种不同的源头&#xff0c;如何高效地管理和查找这些文件成为了一个问题。今天&#xff0c;我们将为您提供一个完美的解决方案——自动归类并统一重命名视频文件。 首先&#xff0c;第一步&#xff0c;我们要进入文件批…

【Python百宝箱】优化 Python 中的科学计算与建模:从 SymPy 到 Optuna

掌握Python科学计算&#xff1a;符号运算、数值计算与模型优化 前言 本文将带您深入了解 Python 中一系列重要的科学计算与优化库。从 SymPy 提供的符号计算&#xff0c;到 scikit-optimize 的贝叶斯优化&#xff0c;再到 NumPy 和 SciPy 的数值计算和统计建模&#xff0c;以…

Unsupported class file major version xx

Java SE 和 Major Version 对应关系如下&#xff1a; Java SEMajor VersionHex18620x3E17610x3D16600x3C15590x3B14580x3A13570x3912560x3811550x3710540x369530x358520x347510x336.0500x325.0490x311.4480x301.3470x2F1.2460x2E1.1450x2D 修改对应SE和major关系可以解决如…

我一人全干!之vue3后台管理中的大屏展示。

使用大屏展示的时候有很多种场景&#xff0c;众多场景都是为了实现大屏自适应。 大屏&#xff0c;顾名思义&#xff0c;就是放在一个固定的屏幕上看的&#xff0c;即使你不做自适应&#xff0c;放在一个固定的屏幕上看也没啥问题&#xff0c;但是很多做大屏的是为了在PC端看&am…