什么是守护进程

脱离控制终端的,运行于后端的进程,由系统管理的,按计划自动启动/停止/重启,用以执行特定的任务。

为什么要有守护进程?

在某些需求场景下,我们希望某项系统任务能够按计划按预期,始终/自动 保持正常运行状态,以便于持续提供服务功能。

一个小栗子,假如,我们部署一个站点服务,当服务器操作系统自动重启后,我们希望部署的站点服务也能够自动启动,无需人工去启动。

再举一个小栗子,假如,以上部署的站点服务,遇到运行错误异常后能够自动重启,以保持正常运行状态,无需人工干预。

再举一个小栗子,假如,某些服务,我们希望它,在每天的凌晨自动启动并运行,在每天的凌晨5点自动关闭,无需人工干预。

脱离终端的后台进程

不依赖于任何终端,不因连接终端的变化而对进程的运行产生关联或影响,与当前环境隔离开来,让程序本身能够自动进入后台运行。以便于让管理员可以在终端继续处理其它工作。

init daemon

当系统启动后,这时候,我们希望能够自动处理一些事情,那么Linux中提供了 init.d,它会在系统启动后自动运行。

我们写一个命令脚本,用于启动对应的应用程序。那么这串脚本就可以以文件的方式,创建于 /etc/init.d 目录下。当被启动后的系统自动运行后,完成自动启动。

一般Linux安装的应用程序会提供此文件,其中包含 启动/停止/状态 等的命令 或应用本身的配置项,把此文件复制到 /etc/init.d/ 目录下,加入自启动,当系统的init运行后,对应的应用程序脚本会被执行并启动服务。

以mysql为例:
提供的文件在安装目录 mysql/support-files/mysql.server,把 mysql.server 复制到 /etc/init.d/ 目录下。


加入系统自启动:

1 chkconfig --add {filename}
2 chkconfig {filename} on

可以通过以下命令手动管理服务状态:

  • 启动:service {filename} start      等同于  /etc/init.d/{filename} start
  • 停止:service {filename} stop      等同于  /etc/init.d/{filename} stop
  • 重启:service {filename} restart   等同于  /etc/init.d/{filename} restart
  • 查看:service {filename} status    等同于  /etc/init.d/{filename} status

system daemon

通常称为 systemd,以文件形式,以 .service 为后缀,创建于 /usr/lib/systemd/system/ 目录下。

文件中的配置项包含:服务描述、启动顺序、启动用户角色、启动类型、启动 / 停止 / 重启、重启模式、重启间隔、超时设置 等

(可参考同目录下其它文件的配置格式)

操作命令为 systemctl,常用操作命令:

启动一个服务 systemctl start {filename}.service
重启一个服务 systemctl restart {filename}.service
重载一个服务配置 systemctl reload {filename}.service
重载所有修改过的配置 systemctl daemon-reload
关闭一个服务 systemctl stop {filename}.service
显示服务状态 systemctl status {filename}.service
设置开机启动 systemctl enable {filename}.service
关闭开机启动 systemctl disable {filename}.service
启动失败的服务列表 systemctl --failed
查看服务活动详细列表 systemctl list-units
列出服务配置文件状态 systemctl list-unit-files
查看服务是否开机启动 systemctl is-enabled {filename}.service
查看服务是否运行状态 systemctl is-active {filename}.service
查看服务是否启动失败 systemctl is-failed {filename}.service
终止一个服务及子进程 systemctl kill {filename}service
远程操作某个服务状态 systemctl -H {username}@{IP} {active} {filename}service

为此,可以利用以上设置对一个服务的管理。

crond 定时任务

简介

周期性的运行或等待处理某些任务的一个Linux进程。特定时间/定时/间隔 运行指定的应用程序。相当于Windows的计划任务。

Linux crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。

Linux crond 工作主要分为以下两类:

  • 系统需要的,自动执行的;如:备份系统数据、清理缓存
  • 个人需要的,配置执行的;如:用户指定运行的应用程序
配置

以下阐述[个人配置执行]的定时任务。

用 cat 命令打开 /etc/crontab,我们来看下配置文件的结构如下:

 1 SHELL=/bin/bash
2 PATH=/sbin:/bin:/usr/sbin:/usr/bin
3 MAILTO=root
4
5 # For details see man 4 crontabs
6
7 # Example of job definition:
8 # .---------------- minute (0 - 59)
9 # | .------------- hour (0 - 23)
10 # | | .---------- day of month (1 - 31)
11 # | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
12 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
13 # | | | | |
14 # * * * * * user-name command to be executed

从 行7 [Example of job definition:] 以下的描述得知:

有 分 / 时 / 日 / 月 / 周 的时间配置项,并指定运行的用户和应用程序命令。

[ * ]:代表该位置单位内的所有值,如:月份中的 1 - 31

[ , ]:代表指定单位多值的间隔符,如:分钟中的 3,8,13,25 四个值

[ - ]:代表指定单位中的范围取值,如:日中的 1 - 10 号

[ / ]:代表指定单位中设定的间隔值,如:小时中的 */2 , 斜杠后表示每2小时

案例

配置案例1:每分钟都执行

* * * * * /bin/appname

配置案例2:每个月的 1-5 号的 [7:50] 执行

50 7 1-5 * * /bin/appname

配置案例3:每月的1号和15号凌晨执行

0 0 1,15 * * /bin/appname

配置案例4:每月每隔10天 的6:30分 执行一次,也就是1、11、21、31号

30 6 */10 * * /bin/appname

配置案例5:每周工作日的凌晨3点钟执行

00 03 * * 1-5 /bin/appname

其它守护进程方式持续更新...

Linux 中的 守护进程的更多相关文章

  1. linux中的守护进程

    概念Daemon(精灵)进程,是Linux中的后台服务进程,生存期较长的进程,通常独立于控制终端并且周期性地执行某种任务或等待处理某些发生的事件.模型守护进程编程步骤1. 创建子进程,父进程退出所有工 ...

  2. Linux中的守护进程——supervise

    絮叨 supervise是daemontools的一个工具,可以用来监控管理Unix下的应用程序运行情况,在应用程序出现异常时,supervise可以重新启动指定程序. 本文介绍一下supervise ...

  3. Linux架构--------Rsync守护进程推和拉

    一.Rsync基本概述 rsync是一款开源.快速.多功能.可实现全量及增量的本地或远程数据同步备份的优秀工具.rsync软件适用于Unix/linux/Windows等多种操作系统平台. 二.Rsy ...

  4. Linux中创建Daemon进程的三种方法

    什么是daemon进程? Unix/Linux中的daemon进程类似于Windows中的后台服务进程,一直在后台运行运行,例如http服务进程nginx,ssh服务进程sshd等.注意,其英文拼写为 ...

  5. Linux中的轻量级进程

    在Linux中,轻量级进程可以是进程,也可以是线程.我们所说的线程,在Linux中,其实是轻量级进程之间共享代码段,文件描述符,信号处理,全局变量时: 如果不共享,就是我们所说的进程. 进程是资源管理 ...

  6. (转)如何在Linux中统计一个进程的线程数

    如何在Linux中统计一个进程的线程数 原文:http://os.51cto.com/art/201509/491728.htm 我正在运行一个程序,它在运行时会派生出多个线程.我想知道程序在运行时会 ...

  7. 杀死Linux中的defunct进程(僵尸进程)的方法指南

    杀死Linux中的defunct进程(僵尸进程)的方法指南_LINUX_操作系统_脚本之家https://www.jb51.net/LINUXjishu/457748.html 这样能看到僵尸进程.

  8. linux下daemon守护进程的实现(以nginx代码为例)

    ngx_int_t ngx_daemon(ngx_log_t *log) { int fd; // 让init进程成为新产生进程的父进程: // 调用fork函数创建子进程后,使父进程立即退出.这样, ...

  9. Linux学习之守护进程详解

    Linux系统守护进程详解                                                              ---转自:http://yuanbin.blog ...

随机推荐

  1. Python基础语法和数据类型最全总结

    摘要:总结了Python最全基础语法和数据类型总结,一文带你学会Python. 本文分享自华为云社区<Python最全基础语法和数据类型总结>,原文作者:北山啦 . 人生苦短,我用Pyth ...

  2. 一次错误使用 go-cache 导致出现的线上问题

    话说一个美滋滋的上午, 突然就出现大量报警, 接口大量请求都响应超时了. 排查过程 查看服务器的监控系统, CPU, 内存, 负载等指标正常 排查日志, 日志能够响应的结果也正常. request.l ...

  3. Arch! 从安装开始

    Arch! 从安装开始 事实上Arch的安装Arch Wiki Installation Guide,已经非常详细了 但是初次面对这些东西时肯定非常迷茫,根本不知道这些东西是在干嘛?为什么要这么干? ...

  4. IDEA 2021版新建Maven、TomCat工程

    目录 2021版IDEA中Maven.TomCat配置 1.基于Webapp创建一个Maven项目 1.1 新建项目模板 1.2 指定名称 1.3 指定信息 1.4 指定Maven地址 1.5 构建成 ...

  5. 【布隆过滤器】基于Hutool库实现的布隆过滤器Demo

    布隆过滤器出现的背景: 如果想判断一个元素是不是在一个集合里,一般想到的是将集合中所有元素保存起来,然后通过比较确定.链表.树.散列表(又叫哈希表,Hash table)等等数据结构都是这种思路,存储 ...

  6. Thinkphp5 日期与时间戳相互转换

    日期转换为时间戳 $date="2013-10-01 12:23:14"; dump(strtotime($date)); //=>1380601394 时间戳 转换为日期 ...

  7. Linux中Nginx服务器的部署和配置

    目录 Nginx安装方式: yum源安装 目录结构: 源码包安装 目录结构: Nginx中支持PHP Nginx中配置php对mysql数据库的支持 Nginx配置反向代理服务器 正常代理 根据不同端 ...

  8. Python中根据库包名学习使用该库包

    目录 Python库包模块 import 语句 from-import 语句 搜索路径 PYTHONPATH 变量 命名空间和作用域 查看模块中所有变量和函数,以及查看具体函数的用法 globals( ...

  9. Docker阿里云镜像存储服务

    阿里云镜像服务地址 https://cr.console.aliyun.com/cn-beijing/instances/repositories   免费免费免费 登陆之后可以免费创建,仓库.地址大 ...

  10. Windows核心编程 第四章 进程(上)

    第4章 进 程     本章介绍系统如何管理所有正在运行的应用程序.首先讲述什么是进程,以及系统如何创建进程内核对象,以便管理每个进程.然后将说明如何使用相关的内核对象来对进程进行操作.接着,要介绍进 ...