Ubuntu Service脚本编写示例
<p><img style="max-width:100%!important;height:auto!important;"title="Ubuntu Service脚本编写示例" alt="Ubuntu Service脚本编写示例" border="0" height="auto" src="https://zhuji.jb51.net/uploads/img/202305/36f5e8ff74dcdb443ae6acc88ffe48a0.jpg" width="auto"></p>
<p>
使用 Linux 时经常用到 ` service mysql restart ` 等命令, 方便进行服务的操作, 具体的服务是怎么写的呢,通过以下示例将了解以下内容:</p>
<ul>
<li>
如何写一个简单的服务</li>
<li>
服务异常关闭时能自动开启配置</li>
</ul>
<h3>
简单的示例</h3>
<p>
nano /lib/systemd/system/xx.service</p>
<ol class="dp-sql">
<li class="alt">
<span><span> </span></span>
</li>
<li>
<span>Description=<span class="keyword">Check</span><span> GPU INFO </span><span class="keyword">by</span><span> chenwei # 服务描述 </span></span>
</li>
<li class="alt">
<span>Wants=network-online.target # 服务依赖于网络 </span>
</li>
<li>
<span><span class="keyword">After</span><span>=network-online.target </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>Type=simple </span>
</li>
<li>
<span>ExecStart=/root/shell/agent/chkgpu # 服务开启时执行脚本 </span>
</li>
<li class="alt">
<span>ExecReload=/bin/kill -HUP $MAINPID # 服务重新加载时执行脚本 </span>
</li>
<li>
<span>RestartSec=5s # 自动启动间隔时间 </span>
</li>
<li class="alt">
<span>Restart=<span class="keyword">on</span><span>-failure # 在什么情况下会自动重启 </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>WantedBy=multi-<span class="func">user</span><span>.target </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>Description=Advanced <span class="keyword">key</span><span>-value store </span></span>
</li>
<li>
<span><span class="keyword">After</span><span>=network.target </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>Type=forking </span>
</li>
<li>
<span>ExecStart=/usr/<span class="keyword">local</span><span>/redis/bin/redis-server /usr/</span><span class="keyword">local</span><span>/redis/etc/redis.conf </span></span>
</li>
<li class="alt">
<span>ExecStop=/bin/kill -s TERM $MAINPID </span>
</li>
<li>
<span>PIDFile=/var/run/redis_6379.pid </span>
</li>
<li class="alt">
<span>Restart=always </span>
</li>
<li>
<span>RestartSec=5s </span>
</li>
<li class="alt">
<span>Restart=<span class="keyword">on</span><span>-failure </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>WantedBy=multi-<span class="func">user</span><span>.target </span></span>
</li>
<li>
<span>Alias=redis.service </span>
</li>
</ol>
<h3>
nginx 示例 </h3>
<ol class="dp-sql">
<li class="alt">
<span><span> </span></span>
</li>
<li>
<span>Description=A high performance web server <span class="op">and</span><span> a reverse proxy server </span></span>
</li>
<li class="alt">
<span><span class="keyword">After</span><span>=network.target </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>Type=forking </span>
</li>
<li class="alt">
<span>PIDFile=/var/run/nginx.pid </span>
</li>
<li>
<span>#ExecStartPre=/usr/<span class="keyword">local</span><span>/nginx/sbin/nginx </span></span>
</li>
<li class="alt">
<span>ExecStart=/usr/sbin/nginx </span>
</li>
<li>
<span>ExecReload=/usr/sbin/nginx -s reload </span>
</li>
<li class="alt">
<span>ExecStop=-/sbin/start-stop-daemon <span class="comment">--quiet --stop --retry QUIT/5 --pidfile /run/nginx.pid</span><span> </span></span>
</li>
<li>
<span>TimeoutStopSec=5 </span>
</li>
<li class="alt">
<span>KillMode=mixed </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>WantedBy=multi-<span class="func">user</span><span>.target </span></span>
</li>
</ol>
<h3>
常用命令 </h3>
<ol class="dp-sql">
<li class="alt">
<span><span>systemctl enable </span><span class="comment">--now nginx.service # 立刻开启并开机启动</span><span> </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>systemctl daemon-reload #重新加载 </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>systemctl enable nginx.service #开机时启动 </span>
</li>
<li>
<span>systemctl disable nginx.service #开机时禁用 </span>
</li>
<li class="alt">
<span>systemctl list-unit-files|grep enabled #已启动服务列表 </span>
</li>
<li>
<span>systemctl <span class="comment">--failed #启动失败服务列表</span><span> </span></span>
</li>
</ol>
<h3>
wssh </h3>
<ol class="dp-sql">
<li class="alt">
<span><span>file=/lib/systemd/system/myssh.service mv $file $file.bak cat «EOF »$file </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> Description=Web SSH server <span class="keyword">by</span><span> chenwei. pip install webssh Wants=network-online.target </span></span>
</li>
<li>
<span><span class="keyword">After</span><span>=network-online.target </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> Type=simple ExecStart=wssh ExecReload=/bin/kill -HUP $MAINPID </span>
</li>
<li class="alt">
<span>RestartSec=5s </span>
</li>
<li>
<span>Restart=<span class="keyword">on</span><span>-failure </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> WantedBy=multi-<span class="func">user</span><span>.target </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>EOF cat $file </span>
</li>
</ol>
<h3>
issh </h3>
<ol class="dp-sql">
<li class="alt">
<span><span>file=/usr/bin/issh </span></span>
</li>
<li>
<span>mv $file $file.bak </span>
</li>
<li class="alt">
<span>cat <<EOF >>$file </span>
</li>
<li>
<span>#!/bin/bash </span>
</li>
<li class="alt">
<span>wssh </span>
</li>
<li>
<span>autossh -M 10111 -NR 0.0.0.0:11111:localhost:22 pc@1.10sh.cn </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>EOF </span>
</li>
<li>
<span>cat $file </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>chmod +x $file </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>file=/lib/systemd/system/issh.service </span>
</li>
<li class="alt">
<span>mv $file $file.bak </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>cat <<EOF >>$file </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>Description=autossh shell <span class="keyword">to</span><span> </span><span class="keyword">connect</span><span> </span><span class="keyword">to</span><span> my server </span><span class="keyword">by</span><span> chenwei. #sudo apt install autossh </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>Wants=network-online.target </span>
</li>
<li class="alt">
<span><span class="keyword">After</span><span>=network-online.target </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>Type=simple </span>
</li>
<li class="alt">
<span>ExecStart=/usr/bin/issh </span>
</li>
<li>
<span>ExecReload=/bin/kill -HUP </span>
</li>
<li class="alt">
<span>RestartSec=5s </span>
</li>
<li>
<span>Restart=<span class="keyword">on</span><span>-failure </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>WantedBy=multi-<span class="func">user</span><span>.target </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>EOF </span>
</li>
<li class="alt">
<span>cat $file </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>systemctl enable <span class="comment">--now issh.service</span><span> </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>systemctl status issh.service </span>
</li>
</ol>
<h3>
pweb</h3>
<p>
使用python 启动一个简单的 http 文件服务。</p>
<ol class="dp-sql">
<li class="alt">
<span><span>sudo -i </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>file=/home/pweb.sh </span>
</li>
<li class="alt">
<span>mv $file $file.bak </span>
</li>
<li>
<span>cat <<EOF >>$file </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>#!/bin/bash </span>
</li>
<li>
<span>python3 -m http.server </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>EOF </span>
</li>
<li class="alt">
<span>cat $file </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>chmod +x $file </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>file=/lib/systemd/system/pweb.service </span>
</li>
<li>
<span>mv $file $file.bak </span>
</li>
<li class="alt">
<span>cat <<EOF >>$file </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>Description=Simple python pweb <span class="keyword">by</span><span> chenwei. </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>Wants=network-online.target </span>
</li>
<li>
<span><span class="keyword">After</span><span>=network-online.target </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>Type=simple </span>
</li>
<li>
<span>ExecStart=/home/pweb.sh </span>
</li>
<li class="alt">
<span>ExecReload=/bin/kill -HUP </span>
</li>
<li>
<span>RestartSec=5s </span>
</li>
<li class="alt">
<span>Restart=<span class="keyword">on</span><span>-failure </span></span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>WantedBy=multi-<span class="func">user</span><span>.target </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span> </span>
</li>
<li class="alt">
<span>EOF </span>
</li>
<li>
<span>cat $file </span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>systemctl enable <span class="comment">--now pweb.service</span><span> </span></span>
</li>
<li class="alt">
<span> </span>
</li>
<li>
<span>systemctl status pweb.service </span>
</li>
</ol>
<p>
原文地址:https://www.toutiao.com/a7005179018735518246/</p>
頁:
[1]