编辑
2025-03-21
Linux
0

目录

启动screen的脚本
使用systemd管理开机自启动任务

不知道怎么回事,我的Ubuntu24.04经常时不时自动重启,这是让人难以接受的。不过一番寻找并没有找到这个重启是谁干的,所以并不能阻止它。但是每次还得我手动把服务开起来,这也太难受了,所以需要写一个脚本将服务在开机时自动开起来。一般来讲后台任务使用screen,开机自启动使用systemd是比较好的做法

启动screen的脚本

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,如果已经有了就不会执行相应的命令

写好脚本后需要赋予其可执行权限

sh
chmod +x <path_to_the_script>

使用systemd管理开机自启动任务

首先创建systemd服务文件

sh
sudo 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配置

sh
sudo systemctl daemon-reload

然后启用服务

sh
sudo systemctl enable start-screens.service

可以执行下面的命令来执行一次脚本

sh
sudo systemctl start start-screens.service

查看screen会话是否正常开启

sh
screen -ls

本文作者:GBwater

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!