如何在启动时用systemd运行linux程序

需要在引导时启动Linux程序吗?systemd软件提供了一种方法,可以在任何Linux发行版上使用systemd来完成这一操作,而systemd是目前大多数版本的版本,包括Ubuntu。我们将带领您完成创建集成服务的过程,甚至与杂志进行对话。...

需要在引导时启动Linux程序吗?systemd软件提供了一种方法,可以在任何Linux发行版上使用systemd来完成这一操作,而systemd是目前大多数版本的版本,包括Ubuntu。我们将带领您完成创建集成服务的过程,甚至与杂志进行对话。

本教程演示如何设置启动系统时启动的系统服务。要在登录时启动图形程序,请改用桌面的启动管理器。

启动时运行程序

有时,您在计算机上安装的软件会将自己连接到Linux启动过程中,这样程序在每次启动计算机时都会自动启动。您可以轻松地通过自己的程序和脚本,或者实际上计算机上的任何其他程序来实现相同的行为。

启动时启动的程序由系统和****器systemd控制。systemd是启动时运行的第一个进程。它始终具有进程ID(PID)1。计算机中运行的其他每个进程都由systemd启动,或者由systemd已经启动的进程启动。

在后台运行的程序称为守护程序或服务。systemd末尾的“d”代表守护进程。在本文中,我们将创建一个示例服务。要勾选所有方框,我们的服务必须是:

  • 通过服务单元文件与systemd集成
  • 启动时启动
  • 使用systemd的控制接口systemctl进行控制
  • 能够写日记

创建服务程序

我们需要一个systemd会启动的程序。我们将创建一个简单的脚本,称为“htg.sh公司”. 本教程使用Gedit文本编辑器,但是您可以使用任何您喜欢的文本编辑器。

touch htg.sh gedit htg.sh

如何在启动时用systemd运行linux程序

gedit编辑器将打开。将以下文本复制并粘贴到编辑器中。

#!/bin/bash echo "htg.service: ## Starting ##" | systemd-cat -p info while : do TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S') echo "htg.service: timestamp ${TIMESTAMP}" | systemd-cat -p info sleep 60 done

保存更改并关闭编辑器。

如何在启动时用systemd运行linux程序

剧本做的不多,但有几点值得注意。

  • 这两条回音线通过systemdcat传输,这是一个从程序中获取输出并将其发送到日志的程序。日记账分录优先。我们使用-p(priority)选项来表示我们的消息仅供参考(info)。它们不是重要的错误或警告。
  • 有一个无休止的while循环。
  • TIMESTAMP变量设置为当前日期和时间。这将被格式化为一条消息并发送到日志。
  • 然后脚本休眠60秒。
  • 60秒后重复循环。因此,这个脚本每分钟向日志写入一条带时间戳的消息。

我们将脚本复制到/usr/local/bin目录。

sudo cp htg.sh /usr/local/bin

如何在启动时用systemd运行linux程序

我们需要让它可执行:

sudo chmod +x /usr/local/bin/htg.sh

如何在启动时用systemd运行linux程序

创建服务单元文件

由systemd启动的每个程序都有一个定义文件,称为服务单元文件。它包含某些属性,systemd可以使用这些属性来定位和启动程序,并定义其某些行为。

我们需要为我们的新服务创建一个单元文件,但是要确保现有的单元文件中没有一个具有我们想要为我们的新服务命名的名称是谨慎的。

sudo systemctl list-unit-files --type-service

如何在启动时用systemd运行linux程序

您可以滚动浏览按字母顺序排列的单位文件列表,并检查是否未使用要使用的名称。

如何在启动时用systemd运行linux程序

我们的服务将被称为“htg服务”. 没有单位文件有这个名称,所以我们可以继续创建我们的单位文件。

sudo gedit /etc/systemd/system/htg.service

如何在启动时用systemd运行linux程序

gedit编辑器将打开。将以下文本复制并粘贴到编辑器中:

[Unit] Description=How-To Geek Service Example Wants=network.target After=syslog.target network-online.target [Service] Type=simple ExecStart=/usr/local/bin/htg.sh Restart=on-failure RestartSec=10 KillMode=process [Install] WantedBy=multi-user.target

保存更改并关闭编辑器。

如何在启动时用systemd运行linux程序

这些条目具有以下含义。这些是典型的条目。我们的简单服务实际上并不需要它们中的大多数,但是包含它们可以让我们解释它们。

  • 描述:这是您的服务的文本描述。
  • 想要:我们的服务想要但不需要在我们的服务启动前启动网络。
  • After:此服务成功启动后(如果尚未运行)应启动的单元名称列表。
  • 类型:简单。一旦ExecStart指定的进程被分叉,systemd就会认为这个服务已经启动。
  • ExecStart:应该启动的进程的路径。
  • 重新启动:何时以及是否应该重新启动服务。我们把它设为“失败时”
  • RestartSec:在尝试重新启动服务之前要等待多长时间。此值以秒为单位。
  • KillMode:定义如果我们请求systemctl停止服务,systemd应该如何终止进程。我们将其设置为“进程”。这将导致systemd仅在主进程上使用SIGTERM信号。如果我们的服务是一个非平凡的程序而不是一个简单的脚本,我们会将其设置为“混合”以确保任何派生的进程也被终止。
  • WantedBy:我们把这个设置为“多-用户.目标,这意味着只要系统处于多个用户可以登录的状态,不管是否有图形用户界面可用,都应该启动服务。

单元文件不需要可执行,但对单元文件的权限应该限制谁可以编辑它。您不希望恶意或恶意用户更改单元文件,以便它完全执行不同的程序。

此命令将授予所有者读写权限,以及对组的读权限。其他人将没有权限。

sudo chmod 640 /etc/systemd/system/htg.service

如何在启动时用systemd运行linux程序

我们可以让systemctl检查单元文件的语法,即使服务还没有运行。将报告任何错误。(实际上,.service”部分对于大多数命令是可选的。)

systemctl status htg.service

如何在启动时用systemd运行linux程序

没有突出显示错误,这意味着我们的单元文件语**确。

启动服务

添加新单位文件或编辑现有单位文件时,必须通知systemd重新加载单位文件定义。

sudo systemctl daemon-reload

如果要在启动时启动服务,必须启用它:

sudo systemctl enable htg

启用服务不会启动它,它只会将它设置为在启动时启动。要立即启动服务,必须将systemctl与start选项一起使用。

sudo systemctl start htg

如何在启动时用systemd运行linux程序

验证服务

手动启动服务或重新启动计算机后,我们可以验证服务是否正常运行。

sudo systemctl status htg.service

如何在启动时用systemd运行linux程序

将为我们显示服务的状态。

如何在启动时用systemd运行linux程序

  • 绿点意味着我们的服务已经启动并顺利运行。
  • 服务的名称是“htg服务,并且详细的描述是我们在单位文件中提供的。
  • 我们将看到哪个单位文件已加载“/etc/systemd/system”/htg服务”.
  • 服务处于活动状态,并为我们列出了启动服务的时间。
  • 它的PID是7762。
  • 有两个任务与服务关联。
  • 该服务总共使用了928千字节的内存。
  • 对照组包括htg.sh公司脚本和sleep命令,该命令已由启动htg.sh公司“大多数情况下,sleep命令将执行此服务的工作。

我们还显示了该服务生成的最后10个日记账分录。不出所料,他们都相隔一分钟。

停止和禁用服务

如果需要停止服务,可以使用以下命令:

sudo systemctl stop htg.service

如何在启动时用systemd运行linux程序

这会停止服务,但不会阻止它在下次重新启动计算机时重新启动。要停止启动时启动的服务,您需要禁用它:

sudo systemctl disable htg.service

如果服务正在运行,此命令不会停止它。它只是告诉systemd不要在下次重新启动时启动服务。

如果要停止服务并阻止它在启动时启动,请同时使用这两个命令。

服务提示

在尝试将程序作为服务启动之前,请确保程序按预期运行。

  • 发表于 2021-04-01 17:43
  • 阅读 ( 280 )
  • 分类:互联网

你可能感兴趣的文章

什么是容器linux?您应该使用它吗?

... systemd ...

  • 发布于 2021-03-15 05:37
  • 阅读 ( 207 )

5个创新的linux操作系统您今天应该尝试一下

... 例如,现在许多Linux操作系统都使用一种称为systemd的特殊软件来启动正在运行的计算机。对此有一些争议(轻描淡写),但任何进一步的讨论都会占用大量的信息。Void使用了一种更轻的替代品runit。 ...

  • 发布于 2021-03-15 07:17
  • 阅读 ( 192 )

如何控制linux启动服务和守护进程

... 然而,一旦Debian(Ubuntu软件包的上游源)切换到systemd,Canonical决定也这样做。Ubuntu 15.04(生动的Vervet)的发布是第一个默认情况下使用新的启动系统的版本。 ...

  • 发布于 2021-03-15 11:22
  • 阅读 ( 214 )

如何在安全容器中使用docker安全测试桌面应用程序

...Docker守护进程将随系统自动启动,但如果您知道如何调整systemd设置,则可以进行不同的设置。 ...

  • 发布于 2021-03-15 18:37
  • 阅读 ( 244 )

没有systemd的linux:为什么要使用devuan,debian fork

您可能会对Linux社区的危机感到惊讶。几年前,systemd init系统的创建加重了许多开发人员和用户的负担。大多数基于Linux的操作系统都采用了systemd,但也有一些选择了另一种方法。 ...

  • 发布于 2021-03-24 05:46
  • 阅读 ( 228 )

没有systemd的最佳linux发行版

当主流Linux发行版采用systemd时,异议者会分叉分发并启动新项目。那么,如果您正在寻找非系统发行版,您有什么选择?我们来看看。 系统D:快速回顾 在历史上,Linux系统中的启动序列是systemv Unix(SysV)引入的初始化系统...

  • 发布于 2021-03-31 14:20
  • 阅读 ( 188 )

如何检查linux内核和操作系统版本

...。然而,其他的并不普遍。例如,hostnamectl只适用于基于systemd的发行版。 不过,不管您面对的是哪种发行版,下面至少有一种方法对您有效。 l**\u释放命令 当我们测试这个命令时,l**èu release命令已经安装在Ubuntu和Manjaro上,但...

  • 发布于 2021-04-01 13:11
  • 阅读 ( 185 )

为什么linux的systemd在这么多年后仍然存在分歧

systemd已经有10年的历史了,但是Linux社区对它的感觉还没有成熟,它现在和以前一样具有分裂性。尽管许多主要的Linux发行版都使用它,但铁杆反对者并没有松懈。 linux引导序列 打开计算机电源后,硬件将引导,然后(根据计...

  • 发布于 2021-04-02 02:56
  • 阅读 ( 178 )

systemd将改变linux主目录的工作方式

systemd的团队希望您采用一种新的方式来管理主目录。称之为“新方式”是轻描淡写的,这是Linux的一个真正的范式转变。以下是您需要了解的有关systemd homed的所有信息,它可能会出现在您附近的Linux发行版中。 对争议并不陌生...

  • 发布于 2021-04-02 04:05
  • 阅读 ( 200 )

如何使用journalctl读取linux系统日志

随着systemd的引入,Linux系统日志记录发生了变化。了解如何使用journalctl命令读取和过滤系统日志消息。 集中式日志记录 对争议并不陌生,systemd系统和****器在收集系统日志的方式上引入了一个重大的改变。根据创建日志的服...

  • 发布于 2021-04-02 17:06
  • 阅读 ( 173 )
fnbi1025
fnbi1025

0 篇文章

相关推荐