需要在引导时启动Linux程序吗?systemd软件提供了一种方法,可以在任何Linux发行版上使用systemd来完成这一操作,而systemd是目前大多数版本的版本,包括Ubuntu。我们将带领您完成创建集成服务的过程,甚至与杂志进行对话。
本教程演示如何设置启动系统时启动的系统服务。要在登录时启动图形程序,请改用桌面的启动管理器。
有时,您在计算机上安装的软件会将自己连接到Linux启动过程中,这样程序在每次启动计算机时都会自动启动。您可以轻松地通过自己的程序和脚本,或者实际上计算机上的任何其他程序来实现相同的行为。
启动时启动的程序由系统和****器systemd控制。systemd是启动时运行的第一个进程。它始终具有进程ID(PID)1。计算机中运行的其他每个进程都由systemd启动,或者由systemd已经启动的进程启动。
在后台运行的程序称为守护程序或服务。systemd末尾的“d”代表守护进程。在本文中,我们将创建一个示例服务。要勾选所有方框,我们的服务必须是:
我们需要一个systemd会启动的程序。我们将创建一个简单的脚本,称为“htg.sh公司”. 本教程使用Gedit文本编辑器,但是您可以使用任何您喜欢的文本编辑器。
touch htg.sh gedit htg.shgedit编辑器将打开。将以下文本复制并粘贴到编辑器中。
#!/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保存更改并关闭编辑器。
剧本做的不多,但有几点值得注意。
我们将脚本复制到/usr/local/bin目录。
sudo cp htg.sh /usr/local/bin我们需要让它可执行:
sudo chmod +x /usr/local/bin/htg.sh由systemd启动的每个程序都有一个定义文件,称为服务单元文件。它包含某些属性,systemd可以使用这些属性来定位和启动程序,并定义其某些行为。
我们需要为我们的新服务创建一个单元文件,但是要确保现有的单元文件中没有一个具有我们想要为我们的新服务命名的名称是谨慎的。
sudo systemctl list-unit-files --type-service您可以滚动浏览按字母顺序排列的单位文件列表,并检查是否未使用要使用的名称。
我们的服务将被称为“htg服务”. 没有单位文件有这个名称,所以我们可以继续创建我们的单位文件。
sudo gedit /etc/systemd/system/htg.servicegedit编辑器将打开。将以下文本复制并粘贴到编辑器中:
[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保存更改并关闭编辑器。
这些条目具有以下含义。这些是典型的条目。我们的简单服务实际上并不需要它们中的大多数,但是包含它们可以让我们解释它们。
单元文件不需要可执行,但对单元文件的权限应该限制谁可以编辑它。您不希望恶意或恶意用户更改单元文件,以便它完全执行不同的程序。
此命令将授予所有者读写权限,以及对组的读权限。其他人将没有权限。
sudo chmod 640 /etc/systemd/system/htg.service我们可以让systemctl检查单元文件的语法,即使服务还没有运行。将报告任何错误。(实际上,.service”部分对于大多数命令是可选的。)
systemctl status htg.service没有突出显示错误,这意味着我们的单元文件语**确。
添加新单位文件或编辑现有单位文件时,必须通知systemd重新加载单位文件定义。
sudo systemctl daemon-reload如果要在启动时启动服务,必须启用它:
sudo systemctl enable htg启用服务不会启动它,它只会将它设置为在启动时启动。要立即启动服务,必须将systemctl与start选项一起使用。
sudo systemctl start htg手动启动服务或重新启动计算机后,我们可以验证服务是否正常运行。
sudo systemctl status htg.service将为我们显示服务的状态。
我们还显示了该服务生成的最后10个日记账分录。不出所料,他们都相隔一分钟。
如果需要停止服务,可以使用以下命令:
sudo systemctl stop htg.service这会停止服务,但不会阻止它在下次重新启动计算机时重新启动。要停止启动时启动的服务,您需要禁用它:
sudo systemctl disable htg.service如果服务正在运行,此命令不会停止它。它只是告诉systemd不要在下次重新启动时启动服务。
如果要停止服务并阻止它在启动时启动,请同时使用这两个命令。
在尝试将程序作为服务启动之前,请确保程序按预期运行。
... 例如,现在许多Linux操作系统都使用一种称为systemd的特殊软件来启动正在运行的计算机。对此有一些争议(轻描淡写),但任何进一步的讨论都会占用大量的信息。Void使用了一种更轻的替代品runit。 ...
... 然而,一旦Debian(Ubuntu软件包的上游源)切换到systemd,Canonical决定也这样做。Ubuntu 15.04(生动的Vervet)的发布是第一个默认情况下使用新的启动系统的版本。 ...
...Docker守护进程将随系统自动启动,但如果您知道如何调整systemd设置,则可以进行不同的设置。 ...
您可能会对Linux社区的危机感到惊讶。几年前,systemd init系统的创建加重了许多开发人员和用户的负担。大多数基于Linux的操作系统都采用了systemd,但也有一些选择了另一种方法。 ...
当主流Linux发行版采用systemd时,异议者会分叉分发并启动新项目。那么,如果您正在寻找非系统发行版,您有什么选择?我们来看看。 系统D:快速回顾 在历史上,Linux系统中的启动序列是systemv Unix(SysV)引入的初始化系统...
...。然而,其他的并不普遍。例如,hostnamectl只适用于基于systemd的发行版。 不过,不管您面对的是哪种发行版,下面至少有一种方法对您有效。 l**\u释放命令 当我们测试这个命令时,l**èu release命令已经安装在Ubuntu和Manjaro上,但...
systemd已经有10年的历史了,但是Linux社区对它的感觉还没有成熟,它现在和以前一样具有分裂性。尽管许多主要的Linux发行版都使用它,但铁杆反对者并没有松懈。 linux引导序列 打开计算机电源后,硬件将引导,然后(根据计...
systemd的团队希望您采用一种新的方式来管理主目录。称之为“新方式”是轻描淡写的,这是Linux的一个真正的范式转变。以下是您需要了解的有关systemd homed的所有信息,它可能会出现在您附近的Linux发行版中。 对争议并不陌生...
随着systemd的引入,Linux系统日志记录发生了变化。了解如何使用journalctl命令读取和过滤系统日志消息。 集中式日志记录 对争议并不陌生,systemd系统和****器在收集系统日志的方式上引入了一个重大的改变。根据创建日志的服...