首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何编写bash脚本以便在进程死机时重新启动进程

问: 我有一个python脚本,它将检查队列对每个元素执行操作: # checkqueue.py while True: check_queue() do_something() 我如何编写一个...bash脚本来检查它是否正在运行,如果没有,则启动它。...假设你的进程名为procA,监控它的进程名为procB,则需要procB成为procA的父进程。因为只有启动你的进程进程才能可靠地等待它结束。而这在Bash中很容易实现。...Restart..." >&2 sleep 1 done 上面的bash代码在一个until循环中运行procA。第一行启动procA等待它结束。当它结束时,until检查其退出状态。...然后需要做的就是启动这个bash脚本,它将监控procA并在必要时重新启动它。如果你想在(操作系统)启动启动监控脚本,你可以用@reboot规则在用户的 cron(1) 中调度它。

16320

shell编程菜鸟教程_java并发编程实战 pdf

内核是Linux系统的心脏,从开机自检就驻留在计算机的内存中,直到计算机关闭为止,而用户的应用程序存储在计算机的硬盘上,仅当需要时才被调入内存。.../bin/bash //执行的代码 echo Hello World 赋予权限执行: //赋予可执行权限 chmod +x a.sh //执行(调用/bin/bash执行a.sh脚本) ....比如在一个bash命令窗口下再使用bash,则变成了子进程,本地变量不会被这个子进程所访问。...login进程启动shell时传递第0个参数指明shell的名字,该参数第一个字符为”-“,指明这是一个login shell。比如对bash而言,启动参数为”-bash”。...当bash以login shell启动时,它会执行/etc/profile中的命令,然后/etc/profile调用/etc/profile.d目录下的所有脚本;然后执行~/.bash_profile,

4.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

Linux pwn入门教程之环境配置

教程欢迎各位师傅吐槽,若对题目和脚本的使用有不妥之处,会在当事师傅反馈之后致歉应要求进行处理。...关于docker的安装与启动此处不再赘述,读者可以根据自己的Linux发行版本自行搜索。...使用 docker exec -it ubuntu.17.04.amd64 /bin/bash 我们可以打开目标容器的一个新的bash shell。...此外,若同时运行多个容器,为了避免端口冲突,在启动容器时,可以将命令docker run -it -p 23946:23946 ubuntu/17.04.amd64 /bin/bash 中的第一个端口号...需要注意的是此时heapTest_x86已经开始运行,我们的目标是附加到其运行的进程上,所以我们需要把断点设置在call ___isoc99_scanf等等待输入的指令运行顺序之后,否则由于计算机的运行速度

1.3K10

systemd进程管理工具实战教程

1. systemd介绍 systemd是目前Linux系统上主要的系统守护进程管理工具,由于init一方面对于进程的管理是串行化的,容易出现阻塞情况,另一方面init也仅仅是执行启动脚本,并不能对服务本身进行更多的管理...4.CentOS7服务的启动与停止不再使用脚本进行管理,也就是/etc/init.d下不在有脚本。...status tomcat #检测状态 Bash Copy 以上两个实战nginx和tomcat程序中自带了启动停止脚本,如果启动得程序没有自带脚本则需要自己编写一个类似得启动停止脚本 实战三 部署...jar程序 实现systemd管理控制 实际得项目中会有一些jar程序需要启动 如果手动启动则需要输入一大串命令 停止则需要杀掉进程来停止,很麻烦 举一个实际启动得例子切换到jar目录下 java -jar...decode.jar -Dconfig=/usr/local/abc/application.properties Bash Copy 编写一个启动脚本 vim demo.sh #!

62530

让类进程脚本「单身」的方法

前言 有某些场景下,我们不希望有多个相同的 Linux 进程 或 Shell 脚本同时执行,因为相同进程同时执行,可能会破坏数据的一致性。...正文 flock 命令为脚本加锁 可以用flock命令为 Shell 脚本加锁。当多个进程可能会执行同一个脚本,这些进程需要保证其它进程没有在操作,以免重复执行。...flock命令来为脚本加锁,如下命令: flock -xn -c -x : 获取一个排它锁,或者称为写入锁,为默认项 -n : 非阻塞模式,当获取锁失败时,返回 1 而不是等待...编写一个测试脚本 test.sh #! /bin/bash echo "Hello World" sleep 1000 2. flock 命令给脚本加锁 flock -xn ....开启另外一个 bash 窗口运行同个的脚本 ? 另外一个 bash 窗口运行了同个脚本后,未获取到锁直接返回了,直到上一个脚本运行完毕,这个才可以开始正常运行。

2.1K20

Docker 应用实践-容器篇

虚拟机管理程序允许多个 VM 在单台计算机上运行。 每个 VM 均包含操作系统,应用程序以及必要的二进制文件和库的完整副本-占用数十 GB。 VM也 可能启动缓慢。...多个容器可以在同一台计算机上运行,并与其他容器共享其 OS 内核,每个容器在用户空间中作为隔离的进程运行。...test6 redis /bin/bash # 创建启动test6,启动后运行/bin/bash交互(/data路径下),exit退出后,容器就停止了 docker run -d --name...进程接收到该信号会立即终止,不进行清理和暂存工作。 该信号不能被忽略、处理和阻塞,它向系统管理员提供了可以杀死任何进程的方法。...与SIGKILL不同的是,SIGTERM信号可以被阻塞和终止,以便程序在退出前可以保存工作或清理临时文件等。 # 二 docker stop 会先发出SIGTERM信号给进程,告诉进程即将会被关闭。

87110

Linux crond 不执行原因分析

分析了原因,crond不执行的原因主要有以下几个方面: 1、crond服务没启动 ps -ef | grep -v grep | grep crond         // 查看crond服务是否运行...output用来调试 可以在crontab的脚本里面添加个 echo $PATH > /tmp/test.log 对比和终端下执行脚本的echo $PATH 6、crond进程太多,全部杀死重启crond...一部分可以同步执行的情况   -n  --nonblock   Fail rather than wait  #为非阻塞模式,当试图设置锁失败,采用非阻塞模式,直接返回1,   -w  --timeout...   Wait for a limited amount of time #设置阻塞超时,当超过设置的秒数,就跳出阻塞,返回1   -o  --close      Close file descriptor..._all.sh 中引用的其它脚本也都需要使用绝对路径,才能被crontab找到执行。

6.1K110

【专业技术】linux启动流程剖析

半年前,我写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。 那篇文章不涉及操作系统,只与主板的板载程序有关。...不难想到,如果多个"运行级别"需要启动同一个程序,那么这个程序的启动脚本,就会在每一个目录里都有一个拷贝。这样会造成管理上的困扰:如果要修改启动脚本,岂不是每个目录都要改一遍?...init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。 ? 下面就是链接文件真正的指向。   ...这样做的另一个好处,就是如果你要手动关闭或重启某个进程,直接到目录 /etc/init.d 中寻找启动脚本即可。...Bash的设置之所以如此繁琐,是由于历史原因造成的。早期的时候,计算机运行速度很慢,载入配置文件需要很长时间,Bash的作者只好把配置文件分成了几个部分,阶段性载入。

1K70

Linux 的启动流程

半年前,我写了《计算机是如何启动的?》,探讨BIOS和主引导记录的作用。 那篇文章不涉及操作系统,只与主板的板载程序有关。...不难想到,如果多个"运行级别"需要启动同一个程序,那么这个程序的启动脚本,就会在每一个目录里都有一个拷贝。这样会造成管理上的困扰:如果要修改启动脚本,岂不是每个目录都要改一遍?...init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。 ? 下面就是链接文件真正的指向。   $ ls -l /etc/rc2.d      README   S01motd -> .....这样做的另一个好处,就是如果你要手动关闭或重启某个进程,直接到目录 /etc/init.d 中寻找启动脚本即可。...Bash的设置之所以如此繁琐,是由于历史原因造成的。早期的时候,计算机运行速度很慢,载入配置文件需要很长时间,Bash的作者只好把配置文件分成了几个部分,阶段性载入。

3.3K50

Linux 的启动流程

字母S表示Start,也就是启动的意思(启动脚本的运行参数为start),如果这个位置是字母K,就代表Kill(关闭),即如果从其他运行级别切换过来,需要关闭的程序(启动脚本的运行参数为stop)。...不难想到,如果多个"运行级别"需要启动同一个程序,那么这个程序的启动脚本,就会在每一个目录里都有一个拷贝。这样会造成管理上的困扰:如果要修改启动脚本,岂不是每个目录都要改一遍?...init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。 ? 下面就是链接文件真正的指向。...这样做的另一个好处,就是如果你要手动关闭或重启某个进程,直接到目录 /etc/init.d 中寻找启动脚本即可。...Bash的设置之所以如此繁琐,是由于历史原因造成的。早期的时候,计算机运行速度很慢,载入配置文件需要很长时间,Bash的作者只好把配置文件分成了几个部分,阶段性载入。

1.9K30

【Linux】Linux进程的理解 --- 冯诺依曼体系、进程描述符、状态、优先级、切换…

2.CPU中含有能够解释计算机指令的指令集,指令集又可分为精简指令集和复杂指令集,这也正是为什么你的程序能够运行起来的原因,因为CPU认识理解你的二进制程序代码,你的二进制程序会被CPU认为是一堆指令的集合...下面便可以看到父进程id始终不变,我的代码对应的进程id会因为程序的多次运行而变化,并且我的进程的父进程bash,所以我们可以得出结论:命令行上启动进程,一般它的父进程没有特殊情况的话,都是bash...计算机在开机的时候,操作系统就会被加载到内存里面,磁盘中的程序在运行的时候也会被加载到内存里面,实际上是加载到操作系统内部,受操作系统的管理,我们知道程序运行的时候,是需要CPU进行读取进程的代码计算的...当多个进程的状态是阻塞的时候,这些进程都无法被立即调度,也就是无法被CPU立即执行,并且排队的进程其实是要等待很长的时间的,因为外设的速度和CPU的速度相比简直是太慢了,差的不是一星半点儿,这个时候,PCB...不是一个进程必须在CPU上跑完才能被CPU拿下来,当代计算机采用的是时间片轮转的策略,一个进程可以跑一会儿就换到下一个进程,在一个时间段内,每个进程都可以跑多次,呈现出来的现象就是多个进程同时运行,例如我的计算机现在可以打开画图工具

1.1K20

Hadoop3.0分布式集群安装知识

管理员可以通过在脚本中执行任何选择检查来确定节点是否处于健康状态。如果脚本检测到节点处于不健康状态,则必须以字符串ERROR打印一行到标准输出。 NodeManager定期生成脚本检查其输出。...在大多数安装中,HDFS进程以“hdfs”执行。 YARN通常使用“yarn”帐户。 Hadoop启动 启动hadoop集群需要启动hdfs和yarn。...1 [yarn]$ $HADOOP_HOME/bin/yarn --daemon start resourcemanager 运行一个脚本,在每个指定的主机上启动一个NodeManager: [Bash...如果使用多个服务器进行负载平衡,则应该在每个服务器上运行它们: [Bash shell] 纯文本查看 复制代码 ?...如果使用多个服务器进行负载平衡,则应该在每个服务器上运行它们: [Bash shell] 纯文本查看 复制代码 ?

2K50

Hadoop3.0集群安装知识

管理员可以通过在脚本中执行任何选择检查来确定节点是否处于健康状态。如果脚本检测到节点处于不健康状态,则必须以字符串ERROR打印一行到标准输出。 NodeManager定期生成脚本检查其输出。...在大多数安装中,HDFS进程以“hdfs”执行。 YARN通常使用“yarn”帐户。 Hadoop启动 启动hadoop集群需要启动hdfs和yarn。...[yarn]$ $HADOOP_HOME/bin/yarn --daemon start resourcemanager 运行一个脚本,在每个指定的主机上启动一个NodeManager: [Bash...如果使用多个服务器进行负载平衡,则应该在每个服务器上运行它们: [Bash shell] 纯文本查看 复制代码 ?...如果使用多个服务器进行负载平衡,则应该在每个服务器上运行它们: [Bash shell] 纯文本查看 复制代码 ?

1.3K70

kubernetes 实用技巧: 在 SHELL 中传递信号

通常是因为我们的业务进程是在脚本启动的,容器的启动入口使用了脚本,所以容器中的主进程并不是我们所希望的业务进程而是 shell 进程,比如下面的 Dockerfile: FROM centos:7 ADD...CMD ["/start.sh"] 在 start.sh 脚本中运行二进制以启动业务进程: #! /bin/bash ......使用 exec 启动 在 shell 中启动二进制的命令前加一个 exec 即可让该二进制启动进程代替当前 shell 进程,即让新启动进程成为主进程: #! /bin/bash ......但有些时候我们不得不启动多个进程,比如从传统部署迁移到 Kubernetes 的过渡期间,使用了富容器,即单个容器中需要启动多个业务进程,这时也只能通过 shell 启动,但无法使用上面的 exec 方式来传递信号...# 启动第一个业务进程记录 pid echo "app1 started with pid $pid1" /bin/app2 & pid2="$!"

2K51

kubernetes 实用技巧: 在 SHELL 中传递信号

通常是因为我们的业务进程是在脚本启动的,容器的启动入口使用了脚本,所以容器中的主进程并不是我们所希望的业务进程而是 shell 进程,比如下面的 Dockerfile: FROM centos:7 ADD...CMD ["/start.sh"] 在 start.sh 脚本中运行二进制以启动业务进程: #! /bin/bash ......使用 exec 启动 在 shell 中启动二进制的命令前加一个 exec 即可让该二进制启动进程代替当前 shell 进程,即让新启动进程成为主进程: #! /bin/bash ......但有些时候我们不得不启动多个进程,比如从传统部署迁移到 Kubernetes 的过渡期间,使用了富容器,即单个容器中需要启动多个业务进程,这时也只能通过 shell 启动,但无法使用上面的 exec 方式来传递信号...# 启动第一个业务进程记录 pid echo "app1 started with pid $pid1" /bin/app2 & pid2="$!"

2.6K71

k8s pod 中的程序为啥服务优雅关闭不生效?收不到 sigterm 信号?

优雅关闭的功能都是正常运行的,久而久之,就没有人关注他了 开始应用 k8s 来部署我们的服务 慢慢的我们过渡到了容器化的方式来部署我们的服务 一般使用容器化,我们回去编写 Dockerfile ,写我们的启动脚本...,例如启动脚本是这样的: start.sh #!/bin/bash ....: 如何让 shell 收到 sigterm 信号的时候,可以传递给他的子进程 实际应用了两种方式 在脚本中,实际启动程序的时候 我们加上 exec 命令,exec 命令可以用于调用执行命令,我们可以这样来修改.../bin/bash exec ..../my_demo_svr 简单的修改了这个脚本之后,咱们的 my_demo_svr 程序会替换 shell,并且不会出现子进程,此时 k8s 发送 sigterm 信号的时候,那么接收信号的直接就是

40320

Linux 启动流程分析

字母S表示Start,也就是启动的意思(启动脚本的运行参数为start),如果这个位置是字母K,就代表Kill(关闭),即如果从其他运行级别切换过来,需要关闭的程序(启动脚本的运行参数为stop)。...加载开机启动程序 前面提到,七种预设的"运行级别"各自有一个目录,存放需要开机启动的程序。不难想到,如果多个"运行级别"需要启动同一个程序,那么这个程序的启动脚本,就会在每一个目录里都有一个拷贝。...init进程逐一加载开机启动程序,其实就是运行这个目录里的启动脚本。 ? 下面就是链接文件真正的指向。   ...这样做的另一个好处,就是如果你要手动关闭或重启某个进程,直接到目录 /etc/init.d 中寻找启动脚本即可。...Bash的设置之所以如此繁琐,是由于历史原因造成的。早期的时候,计算机运行速度很慢,载入配置文件需要很长时间,Bash的作者只好把配置文件分成了几个部分,阶段性载入。

1.6K30
领券