Deepin 设置开机执行某sh文件

背景

deepin系统上部署了Geoserver,但是每次开机后都得手动过去起,麻烦,故想着找个办法解决下

过程

  1. /etc/systemd/system目录下新建一个 geoserver.service,就是【自定义名称】.service的文件,后缀.service似乎不可变,名称随意,我这叫geoserver.service.
touch geoserver.service
  1. 编辑该文件
sudo vim geoserver.service
  1. 按照格式填充内容
[Unit]
Description=geoserver start up on boot # 该内容是对该service的一个描述
After=network.target # 在网络服务启动后启动该服务 主要用于控制服务的启动顺序,确保在指定服务或目标启动完成后再启动当前服务

[Service]
Type=simple # 默认类型,还有其他的参数,大家可以百度
Environment="JAVA_HOME=/home/service/jdk-11.0.22" # JDK给设置乱了,手动指定jdk,而且Geoserver官方文档里写了支持17,但是起来之后地图报错500
ExecStart="/home/service/project/geoserver-2.25/bin/startup.sh" # 写待执行的脚本
WorkingDirectory="/home/service/project/geoserver-2.25/bin" # 这里好像必须指定到bin,我也不知道为啥,牵扯到环境配置问题,就是GEOSERVER_HOME的配置,我没有配置它,如果在 Environment 里跟在 JAVA_HOME 后面写应该就不用指定该参数了
User=service # 运行程序的用户名
Group=service # 运行程序的用户组,一般来说,Linux 在创建用户的时候会创建一个和用户名相同的用户组,所以这里和用户名写一致就可以了
# Restart=on-failure # 失败后重启,默认重启5次,再失败就不重启了,我这里没有用到该参数
# RemainAfterExit=true # 退出程序后提醒? 这个参数我也没有用到


[Install]
WantedBy=multi-user.target # 主要用于定义服务的安装目标,指定服务在哪些目标下启用和启动。multi-user.target 似乎是在可以通过命令行进行登录时才运行

其他

  1. 手动启动geoserver的startup.sh时都是通过 windows10 的 powershell,通过ssh操作的:
cd xxx/xxx/geoserver/bin
sh startup.sh  & # 后面加个 & 可以后台运行,就是关了Terminal程序不会停止
disown # 这个命令就是该terminal 不在拥有该进程,这个时候关了terminal就不影响程序运行了
  1. 按道理说,Debian系的linux都可以这么操作,Redhat就不知道了
posted @ 2024-06-17 10:56  echo_lovely  阅读(61)  评论(0编辑  收藏  举报