什么是守护进程

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

为什么要有守护进程?

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

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

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

再举一个小栗子,假如,某些服务,我们希望它,在每天的凌晨自动启动并运行,在每天的凌晨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. 代码安全丨第六期:XPath注入漏洞样例

    1.什么是XPath注入漏洞? XPath是一种用来在内存中导航整个XML树的语言,它使用路径表达式来选取XML文档中的节点或者节点集. XPath注入是指程序使用外部输入动态构造用于从XML数据库检 ...

  2. Java整合极光推送 ( 简单 )

    Java 整合极光推送官方文档:https://github.com/jpush/jpush-api-java-client 这里记录一下简单的使用步骤:创建一个普通的 Maven 工程然后添加依赖 ...

  3. MSSQL数据库清理Log 压缩数据库日志文件

    dump transaction 数据库名 with no_log go dbcc shrinkdatabase(数据库名)

  4. SLAM导航及控制部分,源码公布

    欢迎Fork,觉得不错就点个小星星吧 ROS源码 https://github.com/ShieldQiQi/TX2_StereoSLAM STM32驱动板源码 https://github.com/ ...

  5. 【网络协议】 RPC vs Http

  6. hdu4535

    题意: 吉哥系列故事--礼尚往来 Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) To ...

  7. Linux中数据库的安装和配置(MySQL与Maria DB)

    目录 MySQL和Maria DB的介绍 MySQL和Maria DB的安装 yum源安装MySQL(Centos6.5+Mysql5.1) 源码包安装MySQL yum源安装Maria DB 源码包 ...

  8. Java Web中间件

    目录 中间件 常见的web中间件有哪些 Tomcat Weblogic Jboss Jetty Webshere Glasshfish 中间件 我们经常会看到中间件,但是,一直好奇的是,中间件到底是什 ...

  9. JAVA WEB应用目录

    目录 Tomcat目录 MyEclipse目录 部署启动应用 Tomcat目录 首先,官方下载 tomcat 安装包,解压.得到下面的目录 bin 目录是tomcat启动和关闭目录.startup.b ...

  10. UVA11375火柴(递推+大数)

    题意:       给你n根火柴,问你能组成多少种数字,比如3根可以组成1或者7,组成的数字中不能有前导0, 思路:       我们开一个数组,d[i]记录用i跟火柴可以组成多少种数字,则更新状态是 ...