[i=s] 本帖最后由 springs 于 2025-4-6 23:18 编辑 [/i]<br />
<br />
<h3>步骤</h3>
<p>服务单元文件通常存放在 <code>/etc/systemd/system/</code> 目录下,文件名以 <code>.service</code> 结尾。例如,要创建一个名为 <code>myapp.service</code> 的服务单元文件,可以使用以下命令进行创建和编辑:</p>
<pre><code class="language-bash">
sudo vim /etc/systemd/system/myapp.service
</code></pre>
<p>在文件中,按照以下格式编写服务配置信息:</p>
<pre><code class="language-plaintext">
[Unit]
Description=My Application Service # 服务的描述信息
After=network.target # 指定在网络服务启动之后启动该服务
[Service]
ExecStart=/path/to/your/application # 启动服务时执行的命令
Restart=always # 服务意外停止时自动重启
User=your_username # 运行服务的用户
[Install]
WantedBy=multi-user.target # 指定服务在多用户模式下启动
</code></pre>
<p>以上配置文件各部分解释如下:</p>
<ul>
<li><code>[Unit]</code> 部分:包含服务的通用信息,如描述、服务启动的顺序依赖等。</li>
<li><code>[Service]</code> 部分:定义服务的具体行为,如启动命令、重启策略、运行用户等。</li>
<li><code>[Install]</code> 部分:指定服务在哪些运行级别下启动。</li>
</ul>
<h4>2. 重新加载 systemd 管理器配置</h4>
<p>在创建或修改服务单元文件后,需要重新加载 <code>systemd</code> 管理器配置,使新的配置生效:</p>
<pre><code class="language-bash">
sudo systemctl daemon-reload
</code></pre>
<h4>3. 测试服务是否能正常启动</h4>
<p>在设置开机启动之前,先手动启动服务,检查服务是否能够正常运行:</p>
<pre><code class="language-bash">
sudo systemctl start myapp.service
</code></pre>
<p>可以使用以下命令检查服务的运行状态:</p>
<pre><code class="language-bash">
sudo systemctl status myapp.service
</code></pre>
<p>如果服务正常运行,输出信息中会显示 <code>Active: active (running)</code>。</p>
<h4>4. 设置服务开机启动</h4>
<p>当确认服务能够正常启动后,使用以下命令设置服务开机启动:</p>
<pre><code class="language-bash">
sudo systemctl enable myapp.service
</code></pre>
<p>该命令会在 <code>/etc/systemd/system/multi-user.target.wants/</code> 目录下创建一个指向 <code>/etc/systemd/system/myapp.service</code> 的符号链接,表示该服务会在多用户模式下开机启动。</p>
<h4>5. 验证开机启动设置</h4>
<p>可以使用以下命令验证服务是否已经设置为开机启动:</p>
<pre><code class="language-bash">
sudo systemctl is-enabled myapp.service
</code></pre>
<p>如果输出结果为 <code>enabled</code>,则表示服务已经成功设置为开机启动。</p>
<h3>其他常用操作</h3>
<ul>
<li><strong>停止服务</strong>:</li>
</ul>
<pre><code class="language-bash">
sudo systemctl stop myapp.service
</code></pre>
<ul>
<li><strong>禁用开机启动</strong>:</li>
</ul>
<pre><code class="language-bash">
sudo systemctl disable myapp.service
</code></pre>
<ul>
<li><strong>重启服务</strong>:</li>
</ul>
<pre><code class="language-bash">
sudo systemctl restart myapp.service
</code></pre>