debian系列 设置命令或脚本开机启动的3种常见方式
本文最后更新于 122 天前,其中的信息可能已经有所发展或是发生改变,如有失效可到评论区留言。

我们在使用Linux系统的时候,经常遇到的一个需求就是需要开机运行命令(或者脚本),本文就以在debian11上开机运行tailscale中继服务器DERP为例,总结一下最常用的3种开机运行命令(或者脚本)的方式。

#以service的方式添加
这是debian推荐的添加开机启动脚本的方式,把开机项注册为service,也方便管理和运维。

我们来看定义service文件的格式,以我配置DERP服务(参见:在云主机上搭建tailscale DERP server(中继服务器))的service为例:

[Unit]
Description=derper.service
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/go/bin/runderper
ExecStop=/usr/local/go/bin/stopderper

[Install]
WantedBy=multi-user.target

因为注册为服务后,可以使用systemctl startsystemctl stop等命令进行管理,所以在service文件中需要提前定义好start和stop对应的行为,一般这里我们可以写2个脚本分别来对应,在DERP的例子中,ExecStart=后面的脚本/usr/local/go/bin/runderper就对应start;ExecStop=后面的脚本/usr/local/go/bin/stopderper对应stop。其中start必须要有,stop则不一定,如果大家没需求可以不定义这个。

先创建runderper脚本:

vim /usr/local/go/bin/runderper

粘贴如下内容并保存退出:

#!/bin/sh
cd /root/go/bin
nohup ./derper -hostname=ab.cd.ef -c=derper.conf -a=:45678 -http-port -1 -certdir=/usr/local/cert -certmode=manual -verify-clients -stun & echo $! > /usr/local/go/bin/app.pid

derper程序的路径,域名,端口,证书存放路径以及app.pid的路径,大家根据自己的实际情况进行修改。

然后创建stopderper脚本:

vim /usr/local/go/bin/stopderper

粘贴如下内容并保存退出:

#!/bin/sh
kill cat app.pid
rm -rf app.pid

分别给这2个文件赋予执行权限:

chmod +x /usr/local/gopath/bin/runderper
chmod +x /usr/local/gopath/bin/stopderper

注册service文件:

vim /etc/systemd/system/derper.service

粘贴如下内容并保存退出:

[Unit]
Description=derper.service
After=network.target

[Service]
Type=forking
ExecStart=/usr/local/go/bin/runderper
ExecStop=/usr/local/go/bin/stopderper

[Install]
WantedBy=multi-user.target

设置服务开机启动:

systemctl start derper
systemctl enable derper

rc.local方式

通过rc.local的方式开机加载脚本是比较古老的方法,却也是很多人习惯的简单的方式。但是在debian 9之后,系统默认已经不带rc.local文件了,只是保留了rc.local服务,例如运行如下命令:

cat /lib/systemd/system/rc-local.service

image.png

并且该服务默认是关闭状态,运行以下命令查看:

systemctl status rc-local

image.png

因为rc-local.servive文件里已经定义了rc.local文件的位置,所以我们只需要先手动创建rc.local文件,如下:

vim /etc/rc.local

然后粘贴以下内容并保存退出:

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0

赋予rc.local文件执行权限:

chmod +x /etc/rc.local

启动rc-local服务:

systemctl enable -now rc-local   #设置服务开机启动

会弹出以下警告:

image.png

不用在意这个警告,因为这个服务只是关联rc.local一个文件而已。

再次运行命令查看服务状态:

systemctl status rc-local.service 

image.png

可以看到service状态已经正常了。

以后需要开机启动的命令,直接添加到rc.local文件的exit 0之前就可以。如果是开机脚本,则用bash xxx.sh的方式添加到exit 0之前。

以我另一篇文章中的DERP服务端设置开机自启动为例(参见:在云主机上搭建tailscale DERP server(中继服务器)),有2种方式:

1、使用screen:
在exit 0前输入以下命令:

screen_name1="derper"
screen -dmSscreen_name1
cmd1="sleep 10;/usr/local/go/bin/runderper";
screen -x -Sscreen_name1 -p 0 -X stuff "cmd1"
screen -x -Sscreen_name1 -p 0 -X stuff '\n'
screen -x -Sscreen_name1 -p 0 -X stuff "exit"

该方式需要安装screen命令,该方式的好处是可以用screen命令切换到对应的终端,如果有多个一直运行在后台的程序时候很有用,例如,架设Trinitycore 3.5.5魔兽世界服务端的时候,worldserver和authserver需要开机自启动(参见:魔兽世界Trinitycore 3.3.5版本搭建傻瓜书)。

2、直接运行启动脚本
exit 0前输入以下命令:

bash /usr/local/go/bin/runderper

#使用Linux面板的进程守护管理器
我使用的宝塔Linux面板,软件中心里有个免费的程序:

image.png

安装并进入程序,点击红框中的添加守护进程:
image.png

image.png

这种方式最简单,我就不多说了,不过前提是大家安装了宝塔Linux面包或者其他有类似功能的面板。

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup

博客内容均系原创,转载请注明出处!更多博客文章,可以移步至网站地图了解。博客的RSS地址为:https://blog.tangwudi.com/feed,欢迎订阅;如有需要,可以加入Telegram群一起讨论问题。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
       

本站已禁用鼠标右键和各种快捷键,代码块内容可以直接在右上角点击复制按钮进行复制

zh_CN