systemctl 常用命令

Skiy 1月前 40

Systemctl 是一个systemd工具,主要负责控制systemd系统和服务管理器。
Systemd 是一个系统管理守护进程、工具和库的集合,用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。

在终端中输入 ps ax | grep systemd,看到第一行,其中的数字 1 表示它的进程号是1,也就是说它是 Linux 内核发起的第一个程序。因此,内核一旦检测完硬件并组织好了内存,就会运行 /usr/lib/systemd/systemd 可执行程序,这个程序会按顺序依次发起其他程序。

Systemd 的核心是一个叫单元unit的概念,它是一些存有关于服务service(在运行在后台的程序)、设备、挂载点、和操作系统其他方面信息的配置文件。Systemd 的其中一个目标就是简化这些事物之间的相互作用,因此如果你有程序需要在某个挂载点被创建或某个设备被接入后开始运行,Systemd 可以让这一切正常运作起来变得相当容易。要列出您 Linux 系统上的所有单元,输入以下命令:
systemctl list-unit-files

现在,systemctl 是与 Systemd 交互的主要工具,它有不少选项。在单元列表中,您会注意到这儿有一些格式化:被启用enabled的单元显示为绿色,被禁用disabled的显示为红色。标记为“static”的单元不能直接启用,它们是其他单元所依赖的对象。若要限制输出列表只包含服务,使用以下命令:
systemctl list-unit-files --type=service

注意,一个单元显示为“enabled”,并不等于对应的服务正在运行,而只能说明它可以被开启。要获得某个特定服务的信息,以 GDM (Gnome Display Manager) 为例,输入以下命令:
systemctl status gdm.service
这条命令提供了许多有用的信息:一段给人看的服务描述、单元配置文件的位置、启动的时间、进程号,以及它所从属的 CGroups(用以限制各组进程的资源开销)。

如果您去查看位于 /usr/lib/systemd/system/gdm.service 的单元配置文件,您可以看到各种选项,包括要被运行的二进制文件(“ExecStart”那一行),相冲突的其他单元(即不能同时进入运行的单元),以及需要在本单元执行前进入运行的单元(“After”那一行)。一些单元有附加的依赖选项,例如“Requires”(必要的依赖)和“Wants”(可选的依赖)。

此处另一个有趣的选项是:
Al Alias=display-manager.service
当您启动 gdm.service 后,您将可以通过 systemctl status display-manager.service 来查看它的状态。当您知道有显示管理程序display manager在运行并想对它做点什么,但您不关心那究竟是 GDM,KDM,XDM 还是什么别的显示管理程序时,这个选项会非常有用。

systemctl status gdm.service

查看更多教程:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html

最新回复 (3)
  • Skiy 1月前
    引用 2

    systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,还是存在系统服务里吧,即:/usr/lib/systemd/system目录下

     

    每一个服务以.service结尾,一般会分为3部分:[Unit]、[Service]和[Install]

    ===========================================================================

    [root@localhost system]# cat ntpdate.service

    [Unit]

    Description=Set time via NTP

    After=syslog.target network.target nss-lookup.target

    Before=time-sync.target

    Wants=time-sync.target

     

    [Service]

    Type=oneshot

    ExecStart=/usr/libexec/ntpdate-wrapper

    RemainAfterExit=yes

     

    [Install]

    WantedBy=multi-user.target

    ===========================================================================

    Unit  描述信息

    Description=     #描述信息

    After=          #在那个程序之前启动

    Before          #在那个程序之后启动

    ===========================================================================

    Service 启动信息

    Type=     #启动类型。

              #Type=oneshot :这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。

              #Type=notify :与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。

              #Type=dbus :若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。

              #Type=idle :systemd会等待所有任务处理完成后,才开始执行 idle 类型的单元。其他行为与 Type=simple 类似。

              #Type=forking :systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程。

              #Type=simple :(默认值) systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket 激活型。

     

    RemainAfterExit=yes     #通知systemctl结束

    User=

    Group=

    Restart=               #Restart=always的时候systemctl会不断重启这个脚本,这种适合程序是脚本的。

                           #Restart=no的时候不会重启,适合程序软件。

     

     

    ExecStart=  #后面跟程序的绝对路径,如果有启动参数,后面加上,如果程序没有参数不需要添加ExecStop这条语句

    ExecStop=    #后面跟程序的绝对路径,如果有停止参数,后面加上

    PIDFile=     #加上程序PID文件绝对路径

    ===========================================================================

    install 安装信息

    WantedBy=          #WantedBy=multi-user.target(单元被允许运行需要的弱依赖性单元,Wantby从Want列表获得依赖信息。)

    ===========================================================================

    表2:服务的启动、重启、停止等常用命令对比

    System V init命令 systemctl命令 作用

    service foo start systemctl start foo.service 启动服务

    service foo restart systemctl restart foo.service 重启服务

    service foo stop systemctl stop foo.service 停止服务

    service foo reload systemctl reload foo.service 重新加载配置文件(不停止服务)

    service foo status systemctl status foo.service 查看服务状态

    表3:设置服务开机启动、不启动等常用命令对比

    System V init命令 systemctl命令 作用

    chkconfig foo on systemctl enable foo.service 开机自动启动

    chkconfig foo off systemctl disable foo.service 开机不自动启动

    chkconfig foo systemctl is-enabled foo.service 查看服务是否为自动启动

    chkconfig --list systemctl list-unit-files 查看各个服务的启动与禁用情况

  • Skiy 1月前
    引用 3

    example:

    [Unit]

    Description=SERVER

    [Service]

    Type=simple

    ExecStart=/data/my_server/server

    WorkingDirectory=/data/my_server

    Restart=no

    Environment=production

    [Install]

    WantedBy=multi-user.target

  • Skiy 1月前
    引用 4

    日志显示:

    Just use the journalctl command, as in:
    journalctl -u service-name.service
    
    Or, to see only log messages for the current boot:
    journalctl -u service-name.service -b
    
    For things named <something>.service, you can actually just use <something>, as in:
    journalctl -u service-name
    
    journalctl -u service-name -o cat -f
返回
发新帖