摘要
服务器中的flask应用似乎在关闭远程控制台之后,会自动关闭,无法访问,只有在设置服务自启动后,才不用自己每次自行启动。
操作
1. 在服务自启目录下新建文件
sudo nano /etc/systemd/system/app.service
添加以下内容
[Unit]
Description=My Python Script Service
After=mysql.service cpolar.service
[Service]
Type=simple
Environment="PATH=/home/ubuntu/miniconda3/envs/myenv/bin:$PATH" # 设置环境变量,确保conda命令可用
ExecStart=/bin/bash -c 'source /home/ubuntu/miniconda3/bin/activate myenv && /home/ubuntu/miniconda3/envs/myenv/bin/python3.8 opt/project_root/app/app.py'
[Install]
WantedBy=multi-user.target
其中envs的路径需要更换为自己的,我的miniconda3是安装在/home/ubuntu目录下,因此虚拟环境在miniconda3的envs文件夹,当然你也可以先激活环境后再使用服务,但是这样还是会有手动的环境,达不到自启动的效果。
在[Unit]下的After参数表示服务在启动前,需要启动的服务,这里我加了内网穿透和mysql的服务,如果你不需要任何服务,可以填写
After=network.target
After=network.target是systemd服务单元文件中的一项设置,用于定义服务启动的顺序。在这个设置中,network.target代表网络服务。这样写表示在网络连接可用的情况下,相关服务才能够正确地运行和访问网络资源。
以下的路径是flask项目的启动路径,替换为自己的app.py路径
opt/project_root/app/app.py
2. 配置cpolar内网穿透服务
如果你并不需要这项服务,在删除了After后面那一项的cpolar服务后,可以跳过这一项内容,cpolar具体安装教程参考我其他博客https://blog.csdn.net/ADONGS_CODER/article/details/134886126
查看cpolar.service内容
cat /etc/systemd/system/cpolar.service
cpolar的服务内容如下
[Unit]
Description=Cpolar Service
Documentation=https://www.cpolar.com/docs
After=network.target nss-lookup.target
[Service]
User=nobody
NoNewPrivileges=true
ExecStart=/usr/local/bin/cpolar start-all -dashboard=on -daemon=on -config=/usr/local/etc/cpolar/cpolar.yml -log=/var/log/cpolar/access.log
Restart=on-failure
RestartPreventExitStatus=23
[Install]
WantedBy=multi-user.target
可以看到配置文件是cpolar.yml,由于本地app应用在5000端口启动,我们需要将5000端口映射到8080端口
编辑yml文件
sudo nano /usr/local/etc/cpolar/cpolar.yml
修改内容如下
tunnels:
website:
proto: http
addr: "5000"
region: cn_vip
将http服务地址改为5000,记得加双引号,不然会报错
3. 服务重新加载
sudo systemctl daemon-reload
4. 启用服务
sudo systemctl enable app.service
sudo systemctl enable cpolar.service
sudo systemctl enable mysql.service
5. 启动app.service服务
sudo systemctl start app.service
查看运行状态
sudo systemctl status app.service
显示正在运行,运行在5000端口
查看cpolar控制台,发现端口映射成功
6. 关于系统管理systemctl的指令集
systemctl start 服务名:启动服务。
systemctl stop 服务名:关闭服务。
systemctl restart 服务名:重启服务。
systemctl reload 服务名:重新加载配置文件。
systemctl status 服务名:查看服务状态。
systemctl enable 服务名:设置开机自启。
systemctl disable 服务名:取消开机自启。
systemctl daemon-reload:后台程序重新加载。
systemctl reboot:重启系统。