什么是守护进程

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

为什么要有守护进程?

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

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

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

再举一个小栗子,假如,某些服务,我们希望它,在每天的凌晨自动启动并运行,在每天的凌晨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. Day14_84_通过反射机制修改和获取class里的属性值

    通过反射机制修改和获取class里的属性值 * 属性对象.set(Object,属性值) 给Object对象中的某个属性赋值(属性对象) * 属性对象.get(Object); 获取Object对象中 ...

  2. 同事写了一个疯狂的类构造器,我要疯了,Builder 模式都不会么?!

    疯狂的类构造器 最近栈长在做 Code Review 时,发现一段创建对象的方法: Task task = new Task(112, "紧急任务", "处理一下这个任务 ...

  3. Redis深入理解

    Redis Redis的三种集群方式 主从复制 原理 从服务器连接主服务器,发送sync(同步)命令 主服务器接收到sync命令后,开始执行bgsave命令生成RDB文件并使用缓存区记录此后执行的所有 ...

  4. adb、adb shell am、adb shell pm命令的详细使用说明

    本文博客地址:http://blog.csdn.net/qq1084283172/article/details/64183248 1.在命令行终端执行下面的命令: adb >adb.txt 2 ...

  5. UVA10382喷水装置

    题意:       给你一个矩形的空地,然后有一些圆形的喷水装置,每个装置的圆心都在矩形宽的中间位置,然偶给你每个矩形的圆心位置和半径,问你最少多少个喷水装置可以把矩形的所有编辑都覆盖上. 思路:   ...

  6. hdu4911 简单树状数组

    题意:      给你一串数字,然后给你最多进行k次交换(只能交换相邻的)问交换后的最小逆序数是多少. 思路:      首先要知道的一个就是给你一个序列,每次只能交换相邻的位置,把他交换成一个递增序 ...

  7. poj2186强联通(牛仰慕)

    题意:       有一群老牛,他们之间有m组敬仰关系,关系可以传递,a仰慕b,b仰慕c,那么a就仰慕c,现在问被所有老牛都仰慕 的有多少? 思路:       想想,是不是一个环中的老牛的关系都是一 ...

  8. Win64 驱动内核编程-24.64位驱动里内嵌汇编

    64位驱动里内嵌汇编 讲道理64位驱动是不能直接内链汇编的,遇到这种问题,可以考虑直接把机器码拷贝到内存里,然后直接执行. 获得机器码的方式,可以写好代码之后,直接通过vs看反汇编,然后根据地址在看内 ...

  9. java+selenium使用JS、键盘滑动滚动条

    本篇文章介绍如何使用JS和键盘对象对页面进行滑动滚动条-------------主要针对java做自动化测试的同学 一:使用键盘对象操作滚动条 //导包 import org.openqa.selen ...

  10. left join 后用 on 还是 where,区别大了!

    前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条. 后来发现 join on and 不会过滤结果记录条数,只会根据and后的 ...