Linux--start-stop-daemon

参考:start-stop-daemon(8) - Linux manual page

1、名称

start-stop-daemon:启动和停止系统守护程序。

2、简介

start-stop-daemon [option...] command

3、描述

start-stop-daemon用于控制系统级进程的创建和终止。使用其中一个匹配选项,可以配置start-stop-deamon寻找一个正在运行进程的已有实例。

注意:除非指定--pid或--pidfile,start-stop-daemon行为类似killall。start-stop-daemon将扫进程表查找任何匹配这个进程名,(如果指定了)父进行pid,uid和/或gid的进程。任何匹配的进行将阻止--start启动这个守护进程。如果指定了--stop(或者通过--signal或--retry指定了一个),将发送TERM信号给所有匹配的进程。对于有存活过一个--stop的长生存期子进程的守护进程,你必须指定一个pidfile。

4、命令

1)-S --start [--] arguments

检查一个指定的进程的存在性。如果这样一个进程存在,start-stop-daemon什么也不做,并且用错误状态1退出(如果指定--oknodo,0)。如果这样一个进程不存在,它启动一个实例,使用通过--exec指定可执行文件,或者通过--startas指定。在命令行上--后传递的任何参数被不修改地传递给要被启动的程序。

2) -K, --stop

检查一个指定进程的存在性。如果这样一个进程存在,start-stop-daemon向他发送由--signal指定的信号,并且以错误状态0退出。如果这样一个进程不存在,start-stop-daemon以错误状态1退出(如果指定了--oknodo则0)。如果指定了--retry,则start-stop-daemon将检查这些进程已经终止了。

3)-T, --status

检查指定进程的存在性,并且根据LSB Init脚本操作,返回一个退出状态码。

4)-H,--help

显示用法信息并且退出。

5)-V, --version

显示程序版本并且退出。

5、选项

进行匹配的选项

1)--pid pid

用指定的pid检查一个进程。这个pid必须是一个大于0的数值。

2)--ppid ppid

用父进程pid ppid检查一个进程。这个ppid必须是一个大于0的数值。

3)-p, --pidfile pidfile

检查一个进程是否已经创建文件pidfile。

注意:如果旧进程终止了,而没有能够删除这个pidfile,单独使用这个进行匹配的选项,可能引起操作非预期的进程。

警告:对全局可写的pidfile使用这个匹配选项,或者对以非特权用户(非root)写这个pidfile的守护进程单独使用他,将用一个错误拒绝,由于这是一个安全风险,因为任何用户能够写入他,或者如果守护进程受到损坏,pidfile的内容不能被信任,并且接着一个特权运行程序(诸如一个以root被执行的init脚本)会结束操作任何系统进程。使用/dev/null时免除这些检查。

4)-x, --exec executable

检查进程是这个executable的实例。executable参数应该是一个绝对路径。

注意:这可能没有按被解析脚本预计地运行,由于可执行文件将指向这个解析器。考虑从一个chroot内运行的进程也将被匹配,因此可能也需要其它匹配限制。

5)-n, --name process-name

用名称process-name检查进程。process-name通常是进程文件名,但它可能已经被这个进程自身更改。

注意:在大多数系统上,这些信息取自源自内核的进程comm名,它倾向于有相当短的长度限制(认为多于15个字符是不可移植的)。

6)-u, --user username|uid

检查由username或uid指定用户拥有的进程。

注意:单独使用这个匹配选项将使得匹配这个用户的所有进程被操作。

通用选项

1)-g, --group group|gid

当启动这个进程时,切换到group或gid。

2)-s, --signal signal

带上--stop,指定信号发送给被终止的进程(默认:TERM)。

3) -R, --retry timeout|schedule

使用--stop,指定start-stop-daemon检查这些进程是否结束了。它将重复检查任何匹配的进行是否正在运行,直到没有匹配的进程运行。如果这些进程不存在,它将采取由调度表决定的进一步操作。

如果指定了timeout替代schedule,则调度表signal/timeout/KILL/timeout被使用,此处signal是由--signal指定的信号。

schedule是一个列表,其至少有由斜杆(/)分隔的两项;每项可能是-signal-number或[-]signal-name,它表示发送那个信号,或timeout,它表示为进程退出等待那些秒数,或者forever,它表示如果需要一直重复调度表余下的。

如果到达了调度表末尾并且没有指定forever,则start-stop-daemon以错误状态2退出。如果指定了一个调度表,则忽略用--signal指定的任何信号。

4)-a, --startas pathname

和--start一起,启动通过pathname指定的进程。如果没有指定,默认为传递给-exec的参数。

5)-t, --test

打印将采取的操作以及设置合适的返回值,但不采取行动。

6)-o, --oknodo

如果没有操作被采取,返回退出状态0替代1。

7)-q, --quiet

不打印信息消息;仅显示错误消息。

8)-c, --chuid username|uid[:group|gid]

在启动进程前,切换到这个用户名/uid。你也可以通过用你对chown命令(user:group)相同的方式追加一个:接着组或者gid,指定一个组。如果不带组指定一个用户,使用那个用户的主GID。当你使用这个选项时,即使没有指定--group选项,你必须知道主组和补充组也被设置了。--group选项仅用于用户通常不是其组员的组(如为一般用户添加每个组成员资格像nobody)。

9) -r, --chroot root

在启动这个进程前,更改目录并且根目录切换到root。请注意pidfile也被写在这个chroot之后。

10)-d, --chdir path

在启动这个进程前,切换目录到path。如果设置了-r |--chroot选项,在chroot后做这件事。当未被指定,在启动这个进程前,start-stop-daemon将切换目录到root目录。

11)-b, --background

一般跟不靠它们自己分离的程序一起使用。这个选项将强制start-stop-daemon在启动进程前fork,并且强制它进入后台。

警告:如果进程由于任何原因执行出错,start-stop-daemon不能检查退出状态。这是最后的方法,并且仅只适用于这样的程序,靠其自己forking没有意义或者为它们添加它们自己做这件事的代码是不合理的。

12) --notify-await

在认为服务器被启动前,等待后台进程发送一个准备好的通知。这实现了部分的systemd准备好协议,如在sd_notify(3)手册页中指定。支持一下变量:

READY=1:程序准备好提供服务,因此我们可以安全地退出。

EXTEND_TIMEOUT_USEC=number:程序请求增加超时时间number微妙。这将重置当前超时时间为指定的值。

ERRNO=number:程序以一个错误退出。做相同事情并且为errno值打印用户友好字符串。

13)--notify-timeout timeout

为-notify-await选项设定超时时间。当超时时间到了,start-stop-daemon将以一个错误代码退出,并且将不等待准备好通知。默认值是60秒。

14)-C, --no-close

当强制守护进程进入后台时,不关闭任何文件描述符。用于调试目的来查看进程输出,或者重定向文件描述符来记录进程输出。仅在使用--background时,才有用。

15)-O, --output pathname

当强制守护进程进入后台时,重定向stdout和stderr到pathname。仅在使用--background时,才有用。

16)-N, --nicelevel int

这在启动进程前更改了它的优先级。

17)-P, --procsched policy:prority

在启动进程前,这更改了它调度测量和进程优先级。通过在末尾添加一个:后跟值,可选地指定优先级。当前支持的测量是other, fifo和rr。

这个选项在某些不支持POSIX进程调度的系统上什么也不做。

18)-I, --iosched class:priority

在启动进程前,这更改了它的IO调度器类和优先级。通过在末尾添加一个:后跟值可选地指定优先级。默认优先级是4,除非类是idle,则优先级总是7。对于类,当前支持地值是idle,best-effort和real-time。

这个选项在不支持Linux IO调度地某些系统上什么也不做。

19) -k, --umask mask

这在启动进程前设置它地umask。

20)-m, --make-pidfile

当前启动一个不创建其自己pid文件地程序时,使用。这个选项将使得start-stop-daemon创建由--pidfile引用的文件,并且在执行这个进程前向其放置这个pid。注意,当使用了--remove-pidfile,在停止程序时,这个文件才被删除。

注意:这个特性不是在所有情况下有作用。当被执行的程序从其主进程forks时,最明显。由于此,仅在结合--background选项一起使用时,它通常才有作用。

21)--remove-pidfile

当终止一个不删除它自己pid文件的程序时,被使用。这个选项将使得start-stop-daemon在终止这个进程后删除由--pidfile引用的文件。

22) -v, --vervose

打印详细的信息消息。

退出状态

1)0:请求的操作被执行。如果指定了--oknodo,什么也没做也是可能的。当指定了--start,并且一个匹配的进程已经在运行了,或者在指定--stop并且没有匹配的进程时,这会发生。

2)1:如果没有指定--oknodo,并且什么也没有做。

3)2:如果指定了--stop和--retry,但到达了调度表末尾并且进程仍在运行。

4)3:任何其它错误。

当使用--status命令时,返回以下状态代码:

1)0:程序正在运行。

2)1:程序没有在运行并且pid文件存在。

3)3:程序没有在运行。

4)4:不能确定程序状态。

示例

1)启动food守护进程,除非一个已经在运行了(一个名为food的进程,以用户food运行,用pid在food.pid中)

start-stop-daemon --start --oknodo --user food --name food \--pidfile /usr/local/var/run/food.pid --startas /usr/sbin/food \--chuid food -- --daemon

2) 发送SIGTERM给food并且最多等待5秒等待其停止:

  start-stop-daemon --stop --oknodo --user food --name food \--pidfile /usr/local/var/run/food.pid --retry 5

3) 一个停止food的自定义调度表的演示:

 start-stop-daemon --stop --oknodo --user food --name food \--pidfile /usr/local/var/run/food.pid --retry=TERM/30/KILL/5

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

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

相关文章

vue-router 源码分析——7.命名视图

这是对vue-router 3 版本的源码分析。 本次分析会按以下方法进行: 按官网的使用文档顺序,围绕着某一功能点进行分析。这样不仅能学习优秀的项目源码,更能加深对项目的某个功能是如何实现的理解。这个对自己的技能提升,甚至面试时…

若依前后端分离 前端路由登录页 如何进行跳转

路由守卫,看这篇文章 http://t.csdnimg.cn/HkypThttp://t.csdnimg.cn/HkypT

MySQL存储与优化 一、MySQL架构原理

1.MySQL体系架构 MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层 (1)网络连接层 客户端连接器(Client Connectors):提供与MySQL服务器建立的支持。目前几乎支持所有主流的服务端编程技术,例如常…

有趣的递归(Recursion),一些直观的示例

从前有座山, 山上有座庙, 庙里有个老和尚在给小和尚讲故事: “从前有座山, 山上有座庙, 庙里有个老和尚在给小和尚讲故事: …” 反复而纠结的定义 看完这个故事, 对递归你已经有了印象, 很好, 这样已足够. 如果你不幸是个喜欢精确定义的人, 那么答案可能无法让你满意: 你想知…

java考试题20道

选择题 编译Java源代码文件的命令是javac javac命令是将Java源代码文件进行编译得到字节码文件(.class文件) java命令是在JVM上运行得到的字节码文件 下面是一个示例: javac test.java -------> test.class java test ------> 运行test.class文件下列那…

vue3 在el-input的光标处插入文本

点击文本框下方的按钮&#xff0c;将相应的文本插入光标处的实现&#xff1a; <el-input type"textarea" rows"4" v-model"formula" blur"handleBlur" clearable></el-input><el-button-group class"short_btn&q…

63、基于深度学习网络的数字分类(matlab)

1、基于深度学习网络的数字分类的原理及流程 基于深度学习网络的数字分类是一种常见的机器学习任务&#xff0c;通常使用的是卷积神经网络&#xff08;CNN&#xff09;来实现。下面是其原理及流程的简要说明&#xff1a; 数据收集&#xff1a;首先&#xff0c;需要收集包含数字…

华为高斯数据库安装

这里主要在虚拟机上安装&#xff0c;选择openEuler系统。已经有很多博文介绍了虚拟机安装&#xff0c;直接推荐博文。 OpenEulerx虚拟机中安装 openEuler添加VMware-tools 数据库的安装也有详细博文推荐 OpenGauss数据库的详细安装 借花献佛&#xff0c;大家努力

【shell script】

文章目录 一、基础shell script二、脚本运行方式的差异三、判断式1.利用test命令2.利用判断符号[] 四、if&#xff0c;case语句1.if...then2.case...esac 五、函数function六、循环1.while和until循环2.for循环 一、基础shell script 在“shell”部分&#xff0c;那是在命令行…

【Oracle】Oracle常用语句大全

目录 创建/删除数据库创建/删除表其他表操作增加字段修改字段重命名字段删除字段 主键/索引/视图相关数据插入数据更新数据删除字段拼接merge into语法案例素材同时更新和插入记录同步错误 分页查询分组查询/筛选排序连接查询1. 内连接&#xff08;INNER JOIN&#xff09;&…

Flutter——最详细(Badge)使用教程

背景 主要常用于组件叠加上圆点提示&#xff1b; 使用场景&#xff0c;消息数量提示&#xff0c;消息红点提示 属性作用backgroundColor红点背景色smallSize设置红点大小isLabelVisible是否显示offset设置红点位置alignment设置红点位置child设置底部组件 代码块 class Badge…

从数据洞察到智慧决策:数字孪生技术在智慧水利中的应用实践,为水库管理提供强有力的数据支撑和智能分析

目录 一、引言 二、数字孪生技术的核心与原理 三、数字孪生技术在智慧水利中的应用场景 1、水库管理的挑战与需求 2、数字孪生水库管理系统的构建 四、数字孪生技术在水库管理中的具体应用案例 1、洪水预测与模拟 2、水资源配置与调度 3、大坝安全监测与评估 4、生态环…

【C++/STL深度剖析】stack和queue的详细概念和使用(图文详解,初学者必看!!)

目录 一、前言 二、stack 的详细解析 &#x1f525; stack的介绍&#x1f525; &#x1f525; stack的构造&#x1f525; &#x1f525; stack的常用接口&#x1f525; &#x1f4a7;push &#x1f4a7;top &#x1f4a7;pop &#x1f4a7;empty &#x1f4a7;size…

C# Queue、List、LinkedList 性能对比

最近需要用到一个先进先出的缓存列队&#xff0c;对比了一下几个可能用的类的性能。。 向添加100w个数据&#xff0c;然后每次弹出100个&#xff0c;输出用时 Queue<int> q new Queue<int>();List<int> l new List<int>();LinkedList<int> ll…

确保跨平台自动化测试脚本的稳定运行:获取谷歌浏览器与ChromeDriver版本20240703

确保跨平台自动化测试脚本的稳定运行&#xff1a;获取谷歌浏览器与ChromeDriver版本 在自动化测试中&#xff0c;确保谷歌浏览器&#xff08;Google Chrome&#xff09;与ChromeDriver版本匹配至关重要&#xff0c;特别是跨平台&#xff08;Windows和Linux&#xff09;测试时。…

Android文件路径获取

文件存储相关的文档 文件存储相关的系列文档如下&#xff0c;可根据需要查看这些文档 Android文件路径获取 Android存储权限梳理及api接口调用 Android各种存储路径的比较 Android R及以上版本中APP外部存储实现 Android文件路径获取 在Android开发中&#xff0c;经常需要…

24位DAC转换的FPGA设计及将其封装成自定义IP核的方法

在vivado设计中,为了方便的使用Block Desgin进行设计,可以使用vivado软件把自己编写的代码封装成IP核,封装后的IP核和原来的代码具有相同的功能。本文以实现24位DA转换(含并串转换,使用的数模转换器为CL4660)为例,介绍VIVADO封装IP核的方法及调用方法,以及DAC转换的详细…

为什么除以n-1而不是n得到的样本方差是总体方差的无偏估计量

文章目录 前言具体的解释&#xff1a; 前言 在统计学中&#xff0c;我们通常使用样本方差来估计总体方差。样本方差的计算通常是将每个观测值与样本均值的差的平方和除以样本大小减去1&#xff0c;即 ( 1 n − 1 ∑ i 1 n ( x i − x ˉ ) 2 ) (\frac{1}{n-1} \sum_{i1}^{n}…

REGX52.H报错

keil cannot open source input file "REGX52.H": No such file or directory 选择下面这个目录 Keil\C51\INC\Atmel

源码扭蛋机开发初探

在软件开发的世界里&#xff0c;创新总是层出不穷。今天&#xff0c;我们将一起探讨一个有趣而富有创意的项目——源码扭蛋机。源码扭蛋机&#xff0c;顾名思义&#xff0c;就是将传统的扭蛋机概念与代码编程相结合&#xff0c;让开发者们在扭动的过程中随机获得各种有趣的、实…