不知道怎么回事,我的Ubuntu24.04经常时不时自动重启,这是让人难以接受的。不过一番寻找并没有找到这个重启是谁干的,所以并不能阻止它。但是每次还得我手动把服务开起来,这也太难受了,所以需要写一个脚本将服务在开机时自动开起来。一般来讲后台任务使用screen
,开机自启动使用systemd
是比较好的做法
sh#!/bin/bash
# 定义一个函数来检查并创建 screen 会话
create_screen_if_not_exists() {
local session_name="$1"
local command="$2"
# 检查 screen 会话是否存在
if screen -list | grep -q "\.${session_name}\s"; then
echo "Screen session '${session_name}' already exists. Skipping."
else
echo "Creating screen session '${session_name}'."
screen -d -m -S "$session_name" bash -c "$command"
fi
}
# 使用函数创建各个 screen 会话
create_screen_if_not_exists "<screen name>" '<command1 && command2 && ... && bash>'
...
create_screen_if_not_exists
函数接受两个参数:名称和命令。命令可以有很多条,用&&
连在一起。这里需要注意的是结尾的&& bash
表示screen会话一直打开。如果希望执行命令后退出,则应使用&& exit
执行函数时会检查是否已经创建了screen,如果已经有了就不会执行相应的命令
写好脚本后需要赋予其可执行权限
shchmod +x <path_to_the_script>
首先创建systemd服务文件
shsudo nano /etc/systemd/system/start-screens.service
其中start-screens.service
是名字可以随意。如果没有nano
可以装一个,然后输入
ini[Unit]
Description=<描述一下这个服务是干什么的>
After=network.target
[Service]
Type=oneshot
ExecStart=<要执行的脚本的路径>
RemainAfterExit=yes
User=<用户名>
[Install]
WantedBy=multi-user.target
其中After=network.target
确保网络启动后再运行脚本(因为我这个脚本是为了启动网络服务)。按Ctrl+S
保存文件,然后按Ctrl+X
退出编辑
随后重新加载systemd配置
shsudo systemctl daemon-reload
然后启用服务
shsudo systemctl enable start-screens.service
可以执行下面的命令来执行一次脚本
shsudo systemctl start start-screens.service
查看screen会话是否正常开启
shscreen -ls
本文作者:GBwater
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!