zoukankan      html  css  js  c++  java
  • Linux服务和systemctl详解

    定义

    A Linux service is an application (or set of applications) that runs in the background waiting to be used, or carrying out essential tasks.

    也就是说,Linux服务是在后台运行的应用程序(或一组应用程序),正在等待执行或正在执行基本任务。
    在Linux或者Unix系统中,服务也被称为Daemons(守护进程)。它们运行在后台,为一些程序提供服务。比如我们熟知的sshd服务(其中d指的就是daemon),它就是ssh命令的相应守护进程。

    两个命令

    service命令

    service 命令通常用于控制服务的一些状态,其使用方法如下

    Usage: service < option > | --status-all | [ service_name [ command | --full-restart ] ]
    

    其中它会去/etc/init.d/目录中寻找service_name,一些基本例子如下(为方便演示,以sshd为例,并且以root身份运行,因此省略了可能的sudo):

    • 查看当前所有服务[+]表示正在运行的,[-]表示当前没有运行,[?]表示因某种原因不能确定其运行状态:
    service --status-all
    
    • 查看单个服务的状态:
    service sshd status
    
    • 启动停止重启重载服务
    service sshd start
    service sshd stop
    service sshd restart
    service sshd reload 
    

    systemctl命令

    systemctl是一个新的用来控制systemd和service的工具,用来取代旧的SysV init 系统管理。
    主要语法:

    systemctl [OPTION] [SERVICE]
    

    下面给出些基本操作,注意事项同上

    • 查看单个服务的状态:
    systemctl status sshd
    

    或者systemctl is-active sshd来查看服务是否运行

    • 启动停止重启重载服务
    systemctl start sshd
    systemctl stop sshd
    systemctl restart sshd
    systemctl reload sshd
    
    • 查看所有服务,这里的服务非常详细
    systemctl list-unit-files
    

    或者

    systemctl list-units --type service
    

    其中Enabled表明服务正在运行;Disabled表明服务当前没有运行;Masked表示服务不会被运行,除非我们手动移除这个标志;Static表示服务只有在别的服务或单元需要它时才被使用。

    • 开机自启
    systemctl enable sshd
    

    或者

    systemctl disable sshd
    

    来取消开机自启

    service和systemctl的比较

    总的来说,后者(systemctl)的功能比前者要强大得多,前者的功能后者似乎都包括,而且后者还含有不少前者所没有的功能。
    另外我还看到有些linux发行版本会将service命令重定向为systemctl命令,如下图所示:
    在这里插入图片描述

    创建服务

    首先创建服务的执行的代码,也就是将某个程序的运行代码转为服务。
    这里以我的一个程序为例,/root/flynet -M socks-tcp -L 8888,运行之后会监听8888端口。具体这个程序的用途在这里并不重要,我们只用知道运行之后它会监听相应端口即可。

    然后在/etc/systemd/system目录下新建一个文件,我这里以flynet.service为例,内容为:

    [Unit]
    Description=Flynet service
    After=network.target
    
    [Service]
    ExecStart=/root/flynet -M socks-tcp -L 8888
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    

    其中Description为该服务的描述;After为服务的启动顺序,表示在某种条件达到后才执行,这里表示的在网络就绪之后运行;ExecStart即为你要执行的目标代码;Restart表示当该服务因某种原因退出之后,自动启动的配置;WantedBy表示安装的对象,这里表示多用户。

    服务创建好之后,然后可以通过下面的命令来启动服务

    systemctl start flynet
    

    还可以通过下面的命令来实现开机自启

    systemctl enable flynet
    

    其他

    开机自启

    现在开机自启的实现方式中,比较常用的有两种,其一就是上文中的创建服务,另一种就是cron

    cron主要用于定时任务,不过也可以实现开机自启。
    下面也简单介绍下cron的,首先输入

    crontab -e
    

    然后选择你喜欢的输入法,之后再输入

    @reboot /home/user/test.sh 
    

    这里表示的是开机会自动运行后面的脚本文件,当然后面内容的内容是自定义的,也可以是单个命令,而不局限于脚本文件。之后再保存即可。

    这样就使用cron实现了开机自启,更多cron可以参考我这篇博客

  • 相关阅读:
    Codeforces 377 A Maze【DFS】
    分糖果 5.0升级版
    poj_1201_Intervals
    NOIP2016全国信息学分区联赛提高组第二试 组合问题
    NOIP2016全国信息学分区联赛提高组第一试 玩具迷题
    NOIP 2016提高组总结
    2016年提高组模拟试题(20161105)Mahjong
    打鼹鼠
    2015年普级组模拟试题 小X的矩阵
    交汇的火力
  • 原文地址:https://www.cnblogs.com/asche/p/11973871.html
Copyright © 2011-2022 走看看