立豪 發表於 2024-4-2 00:00:00

systemd添加自定义系统服务设置自定义开机启动的方法

<p>
        <span><strong>1.服务权限</strong></span></p>
<p>
        systemd有系统和用户区分;系统(/user/lib/systemd/system/)、用户(/etc/lib/systemd/user/).一般系统管理员手工创建的单元文件建议存放在/etc/systemd/system/目录下面。</p>
<p>
        <span><strong>2.创建服务文件</strong></span></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterxhtml" id="highlighter_970240">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="xhtml plain"></code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="xhtml plain">Description=nginx - high performance web server</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="xhtml plain">Documentation=http://nginx.org/en/docs/</code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="xhtml plain">After=network.target remote-fs.target nss-lookup.target</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="xhtml spaces"> </code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="xhtml plain"></code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="xhtml plain">Type=forking</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="xhtml plain">PIDFile=/run/nginx.pid</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="xhtml plain">ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="xhtml plain">ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="xhtml plain">ExecReload=/bin/kill -s HUP $MAINPID</code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="xhtml plain">ExecStop=/bin/kill -s QUIT $MAINPID</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="xhtml plain">PrivateTmp=true</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="xhtml spaces"> </code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="xhtml plain"></code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="xhtml plain">WantedBy=multi-user.target</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        <span><strong></strong></span></p>
<p>
        Description : 服务的简单描述</p>
<p>
        Documentation : 服务文档</p>
<p>
        Before、After:定义启动顺序。Before=xxx.service,代表本服务在xxx.service启动之前启动。After=xxx.service,代表本服务在xxx.service之后启动。</p>
<p>
        Requires:这个单元启动了,它需要的单元也会被启动;它需要的单元被停止了,这个单元也停止了。</p>
<p>
        Wants:推荐使用。这个单元启动了,它需要的单元也会被启动;它需要的单元被停止了,对本单元没有影响。</p>
<p>
        <span><strong></strong></span></p>
<p>
        Type=simple(默认值):systemd认为该服务将立即启动。服务进程不会fork。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是socket激活型。</p>
<p>
        Type=forking:systemd认为当该服务进程fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。使用此启动类型应同时指定 PIDFile=,以便systemd能够跟踪服务的主进程。</p>
<p>
        Type=oneshot:这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。</p>
<p>
        Type=notify:与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。</p>
<p>
        Type=dbus:若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd认为服务就绪。</p>
<p>
        Type=idle: systemd会等待所有任务(Jobs)处理完成后,才开始执行idle类型的单元。除此之外,其他行为和Type=simple 类似。</p>
<p>
        PIDFile:pid文件路径</p>
<p>
        ExecStart:指定启动单元的命令或者脚本,ExecStartPre和ExecStartPost节指定在ExecStart之前或者之后用户自定义执行的脚本。Type=oneshot允许指定多个希望顺序执行的用户自定义命令。</p>
<p>
        ExecReload:指定单元停止时执行的命令或者脚本。</p>
<p>
        ExecStop:指定单元停止时执行的命令或者脚本。</p>
<p>
        PrivateTmp:True表示给服务分配独立的临时空间</p>
<p>
        Restart:这个选项如果被允许,服务重启的时候进程会退出,会通过systemctl命令执行清除并重启的操作。</p>
<p>
        RemainAfterExit:如果设置这个选择为真,服务会被认为是在激活状态,即使所以的进程已经退出,默认的值为假,这个选项只有在Type=oneshot时需要被配置。</p>
<p>
        <span><strong></strong></span></p>
<p>
        Alias:为单元提供一个空间分离的附加名字。</p>
<p>
        RequiredBy:单元被允许运行需要的一系列依赖单元,RequiredBy列表从Require获得依赖信息。</p>
<p>
        WantBy:单元被允许运行需要的弱依赖性单元,Wantby从Want列表获得依赖信息。</p>
<p>
        Also:指出和单元一起安装或者被协助的单元。</p>
<p>
        DefaultInstance:实例单元的限制,这个选项指定如果单元被允许运行默认的实例。</p>
<p>
        <span><strong>3.重载服务</strong></span></p>
<p>
        systemctl enable nginx.service</p>
<p>
        就会在/etc/systemd/system/multi-user.target.wants/目录下新建一个/usr/lib/systemd/system/nginx.service 文件的链接。</p>
<p>
        <span><strong>4.操作服务</strong></span></p>
<div class="jb51code">
        <div>
                <div class="syntaxhighlighterxhtml" id="highlighter_433519">
                        <div class="toolbar">
                                <span>?</span>
</div>
                        <table border="0" cellpadding="0" cellspacing="0"><tbody><tr>
<td class="gutter">
                                                        <div class="line number1 index0 alt2">
                                                                1</div>
                                                        <div class="line number2 index1 alt1">
                                                                2</div>
                                                        <div class="line number3 index2 alt2">
                                                                3</div>
                                                        <div class="line number4 index3 alt1">
                                                                4</div>
                                                        <div class="line number5 index4 alt2">
                                                                5</div>
                                                        <div class="line number6 index5 alt1">
                                                                6</div>
                                                        <div class="line number7 index6 alt2">
                                                                7</div>
                                                        <div class="line number8 index7 alt1">
                                                                8</div>
                                                        <div class="line number9 index8 alt2">
                                                                9</div>
                                                        <div class="line number10 index9 alt1">
                                                                10</div>
                                                        <div class="line number11 index10 alt2">
                                                                11</div>
                                                        <div class="line number12 index11 alt1">
                                                                12</div>
                                                        <div class="line number13 index12 alt2">
                                                                13</div>
                                                        <div class="line number14 index13 alt1">
                                                                14</div>
                                                        <div class="line number15 index14 alt2">
                                                                15</div>
                                                        <div class="line number16 index15 alt1">
                                                                16</div>
                                                        <div class="line number17 index16 alt2">
                                                                17</div>
                                                        <div class="line number18 index17 alt1">
                                                                18</div>
                                                        <div class="line number19 index18 alt2">
                                                                19</div>
                                                </td>
                                                <td class="code">
                                                        <div class="container">
                                                                <div class="line number1 index0 alt2">
                                                                        <code class="xhtml plain">#启动服务</code>
</div>
                                                                <div class="line number2 index1 alt1">
                                                                        <code class="xhtml plain">$ sudo systemctl start nginx.service</code>
</div>
                                                                <div class="line number3 index2 alt2">
                                                                        <code class="xhtml spaces"> </code>
</div>
                                                                <div class="line number4 index3 alt1">
                                                                        <code class="xhtml plain">#查看日志</code>
</div>
                                                                <div class="line number5 index4 alt2">
                                                                        <code class="xhtml plain">$ sudo journalctl -f -u nginx.service</code>
</div>
                                                                <div class="line number6 index5 alt1">
                                                                        <code class="xhtml plain">— Logs begin at 四 2015-06-25 17:32:20 CST. —</code>
</div>
                                                                <div class="line number7 index6 alt2">
                                                                        <code class="xhtml plain">6月 25 10:28:24 Leco.lan systemd: Starting nginx – high performance web server…</code>
</div>
                                                                <div class="line number8 index7 alt1">
                                                                        <code class="xhtml plain">6月 25 10:28:24 Leco.lan nginx: nginx: the configuration file /etc/nginx/nginx.conf syntax is ok</code>
</div>
                                                                <div class="line number9 index8 alt2">
                                                                        <code class="xhtml plain">6月 25 10:28:24 Leco.lan nginx: nginx: configuration file /etc/nginx/nginx.conf test is successful</code>
</div>
                                                                <div class="line number10 index9 alt1">
                                                                        <code class="xhtml plain">6月 25 10:28:24 Leco.lan systemd: Started nginx – high performance web server.</code>
</div>
                                                                <div class="line number11 index10 alt2">
                                                                        <code class="xhtml spaces"> </code>
</div>
                                                                <div class="line number12 index11 alt1">
                                                                        <code class="xhtml plain">#重启</code>
</div>
                                                                <div class="line number13 index12 alt2">
                                                                        <code class="xhtml plain">$ sudo systemctl restart nginx.service</code>
</div>
                                                                <div class="line number14 index13 alt1">
                                                                        <code class="xhtml spaces"> </code>
</div>
                                                                <div class="line number15 index14 alt2">
                                                                        <code class="xhtml plain">#重载</code>
</div>
                                                                <div class="line number16 index15 alt1">
                                                                        <code class="xhtml plain">$ sudo systemctl reload nginx.service</code>
</div>
                                                                <div class="line number17 index16 alt2">
                                                                        <code class="xhtml spaces"> </code>
</div>
                                                                <div class="line number18 index17 alt1">
                                                                        <code class="xhtml plain">#停止</code>
</div>
                                                                <div class="line number19 index18 alt2">
                                                                        <code class="xhtml plain">$ sudo systemctl stop nginx.service</code>
</div>
                                                        </div>
                                                </td>
                                        </tr></tbody></table>
</div>
        </div>
        <div class="codetool" id="codetool">
                <div class="code_n">
                        <textarea></textarea>
</div>
        </div>
</div>
<p>
        以上就是小编为大家带来的systemd添加自定义系统服务设置自定义开机启动的方法全部内容了,希望大家多多支持~</p>
頁: [1]
查看完整版本: systemd添加自定义系统服务设置自定义开机启动的方法