Linux 定时启动项目

426 阅读2分钟

查看运行中的所有端口和pid

netstat -tulnp

终止指定pid运行

kill 881 # 881为pid

后台运行 和 将命令放入后台

如果你想在后台运行 poetry run uvicorn main:app --reload --port 7001 命令,你可以使用 nohup(no hangup)命令来确保即使在退出终端会话后,命令也能继续在后台运行。 同时,你可以结合 & 符号将命令放入后台。

nohup poetry run uvicorn main:app --reload --port 7000 &

在你使用 & 符号将命令放入后台时,如果你的 shell 配置正确,并且你的系统配置允许,后台进程可能会被一个叫做 disown 的机制自动分离,这就是为什么在某些情况下,即使没有使用 nohup,后台进程也能在终端关闭后继续运行。 总的来说,nohup 提供了一个确保后台进程在终端关闭后继续运行的机制,特别是在你的 shell 或系统配置可能不会自动提供这种保护的情况下。

定时脚本保证服务启动

脚本监控指定端口,并在端口没有运行时启动一个服务;

注意终端和宝塔环境是分隔的,不要用宝塔的定时任务,来执行终端的脚本;

#!/bin/bash

# 定义要监控的端口
PORT=7000

# 定义 poetry 的绝对路径,通过命令获取:which poetry
POETRY_PATH="/user/python3.12/bin/poetry"

# 定义启动服务的命令
START_COMMAND="$POETRY_PATH run uvicorn main:app --reload --port $PORT"

# 使用 ss 命令检查端口是否被监听
if ss -lntup | grep -q ":$PORT "; then
    echo "端口 $PORT 已在运行"
else
    echo "端口 $PORT 未运行,正在启动服务..."
    # 执行启动服务的命令
    $START_COMMAND & 
fi
  1. 编辑crontab:使用crontab命令编辑当前用户的定时任务配置。
crontab -e
  1. 设置定时规则:在打开的编辑器中,你需要添加一个定时规则,这个规则告诉cron何时执行你的脚本。规则格式如下:
# minute hour day-of-month month day-of-week command
0 2 * * * /path/to/my_script.sh

手动运行此脚本

当前目录下执行 ./name.sh

vim下 按 Esc 键确保你处于普通模式

  • 输入 :wq 并按 Enter。这会保存你的更改并退出编辑器。
  • :w 是写入(保存)命令,
  • :q 是退出命令。

重启cron服务以应用更改(如果需要):

systemctl restart crond

其他

pipenv安装项目遇到问题

1、使用pipenv install安装报错:'NoneType' object is not callable

pipenv --rm //清除原有安装
pipenv install //重新安装

//遇到过还是不行的,删除了pipenv 重新安装就好了;推荐配置下国内镜像
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/
pip uninstall pipenv
pip install pipenv

gunicorn运行

一个flask小项目,想用gunicorn运行,配置了gunicorn_conf.py文件,运行命令

gunicorn index:app --config=gunicorn_conf.py
//index是index.py文件  app是index.py文件里的主变量

执行命令后没报错,但项目没跑起来,监听了端口,不存在。还是改用flask自带的运行方式