本地项目路径: F:\PythonProject\TestSpider
服务器IP: 192.168.1.78
服务器用户名: python_server
服务器目标路径: /home/python/hz/TestSpider
Python版本: 3.9
Conda环境: 使用路径环境 /home/python/hz/TestSpider/venv
powershell
# 打开 PowerShell 或 Git Bash
cd F:\PythonProject\TestSpider
# 打包项目(排除不需要的文件)
tar -czf TestSpider.tar.gz \
--exclude='venv' \
--exclude='__pycache__' \
--exclude='*.pyc' \
--exclude='.git' \
--exclude='.idea' \
--exclude='logs' \ .
使用图形化SFTP工具(推荐):
连接到python@192.168.1.78
导航到/tmp 目录
将TestSpider.tar.gz 拖拽上传
或使用命令行:
powershell
scp F:\PythonProject\TestSpider.tar.gz python@192.168.1.78:/tmp/
bash
ssh python@192.168.1.78
bash
# 创建目标目录
mkdir-p /home/python/hz/TestSpider
# 解压项目
cd /tmp
unzipTestSpider.zip -d /home/python/hz/TestSpider/
# 或如果是tar.gz
tar-xzfTestSpider.tar.gz -C /home/python/hz/TestSpider/
# 验证解压
ls-la /home/python/hz/TestSpider/
# 清理临时文件
rm /tmp/TestSpider.zip # 或 .tar.gz
bash
# 切换到项目目录
cd /home/python/hz/TestSpider
# 基于 Anaconda 创建新环境
conda create --prefix ./venv python=3.9 -y --no-default-packages
# 激活 conda 环境
conda activate ./venv
# 安装依赖
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple
# 查看指定环境的路径
conda env list
-- 单独的(如果需要)
pip install DBUtils==3.1.2 -i https://mirrors.aliyun.com/pypi/simple
pip install tenacity==8.0.1 -i https://mirrors.aliyun.com/pypi/simple
bash
bash
# 永久设置(添加到.bashrc)
echo"export PYTHONPATH=/home/python/hz/TestSpider:\$PYTHONPATH">> ~/.bashrcsource ~/.bashrc
# 或临时设置(当前会话)
exportPYTHONPATH=/home/python/hz/TestSpider:$PYTHONPATH
bash
# 创建启动脚本
cat> /home/python/hz/TestSpider/run_utils/run_dat_file_process.sh <<'EOF'
#!/bin/bash
#Description: 启动数据处理服务
export PYTHONPATH=/home/python/hz/TestSpider:$PYTHONPATH
py_path1=run_dat_file_process.py
project_path1=/home/python/hz/TestSpider/run_utilscd $project_path1
nohup python ${py_path1} 1>> nohup_run_dat_file_process.log 2>&1 &echo $! > save_pid_run_dat_file_process.txt
echo "服务已启动,PID: $(cat save_pid_run_dat_file_process.txt)"EOF
# 添加执行权限
chmod +x /home/python/hz/TestSpider/run_utils/run_dat_file_process.sh
bash
# 手动测试(前台运行)
cd /home/python/hz/TestSpider/run_utils
exportPYTHONPATH=/home/python/hz/TestSpider:$PYTHONPATHpython run_dat_file_process.py
# 看到类似输出表示成功:# start_time: 2026-04-30 xx:xx:xx.xxxxxx# process over!# Running time: x.xx Seconds
bash
# 后台运行
cd /home/python/hz/TestSpider/run_utils./run_dat_file_process.sh
# 查看进程
ps aux |grep run_dat_file_process
# 查看日志
tail-f nohup_run_dat_file_process.log
用ctrl+c 退出
bash
cat> /home/python/hz/TestSpider/run_utils/cron_task.sh <<'EOF'
#!/bin/bashcd
/home/python/hz/TestSpider/run_utilsexport
PYTHONPATH=/home/python/hz/TestSpider:$PYTHONPATH/home/python/hz/TestSpider/venv/bin/python run_dat_file_process.py >> nohup_run_dat_file_process.log 2>&1EOF
chmod +x /home/python/hz/TestSpider/run_utils/cron_task.sh
bash
# 编辑定时任务 powerful2013
crontab-e
# 添加以下行(每10分钟执行)
*/10 * * * * /home/python/hz/TestSpider/run_utils/cron_task.sh
# 保存退出(vim: ESC + :wq)
bash
# 查看已添加的任务
crontab-l
# 查看cron服务状态
sudo systemctl status crond
# 实时监控日志
tail-f /home/python/hz/TestSpider/run_utils/nohup_run_dat_file_process.log
bash
cd /home/python/hz/TestSpider/run_utils./run_dat_file_process.sh
bash
kill$(cat /home/python/hz/TestSpider/run_utils/save_pid_run_dat_file_process.txt)
bash
ps aux |grep run_dat_file_process
bash
# 实时日志
tail-f /home/python/hz/TestSpider/run_utils/nohup_run_dat_file_process.log
# 查看最后100行
tail-100 /home/python/hz/TestSpider/run_utils/nohup_run_dat_file_process.log
# 查看自定义日志
tail-f /home/python/hz/TestSpider/logs/2026-04/2026-04-30*.log
bash
kill$(cat save_pid_run_dat_file_process.txt)./run_dat_file_process.sh
bash
cat> /home/python/hz/TestSpider/run_utils/manage.sh <<'EOF'
#!/bin/bashcd /home/python/hz/TestSpider/run_utilscase "$1" in start)
export PYTHONPATH=/home/python/hz/TestSpider:$PYTHONPATH
nohup python run_dat_file_process.py >> nohup_run_dat_file_process.log 2>&1 & echo $! > save_pid_run_dat_file_process.txt echo "服务已启动,PID: $(cat save_pid_run_dat_file_process.txt)" ;; stop) if [ -f save_pid_run_dat_file_process.txt ]; then kill $(cat save_pid_run_dat_file_process.txt) rm save_pid_run_dat_file_process.txt echo "服务已停止" else echo "PID文件不存在" fi ;; status) if [ -f save_pid_run_dat_file_process.txt ]; then PID=$(cat save_pid_run_dat_file_process.txt) if ps -p $PID > /dev/null 2>&1; then echo "服务运行中,PID: $PID" else echo "服务未运行" fi else echo "服务未启动" fi ;; log) tail -f nohup_run_dat_file_process.log ;; *) echo "用法: $0 {start|stop|status|log}" exit 1 ;;esac
EOF
chmod +x /home/python/hz/TestSpider/run_utils/manage.sh
使用方式:
bash
./manage.sh start
# 启动
./manage.sh stop
# 停止
./manage.sh status
# 状态
./manage.sh log
# 查看日志
解决:设置PYTHONPATH
bash
exportPYTHONPATH=/home/python/hz/TestSpider:$PYTHONPATH
解决:使用路径方式激活
bash
source /home/python/hz/TestSpider/venv/bin/activate
解决:添加执行权限
bash
chmod +x /home/python/hz/TestSpider/run_utils/*.sh
解决:
使用绝对路径
在脚本中设置环境变量
检查cron服务状态
脚本是一次性任务:运行完会自动退出,这是正常的
定时任务实现周期性执行:通过crontab每10分钟触发一次
日志位置:
nohup日志:
/home/python/hz/TestSpider/run_utils/nohup_run_dat_file_process.log
业务日志:/home/python/hz/TestSpider/logs/2026-04/
虚拟环境:
使用conda路径环境,位置在 /home/python/hz/TestSpider/venv
项目文件已上传并解压
Conda环境已创建
依赖包已安装
PYTHONPATH已设置
启动脚本已创建并有执行权限
手动测试运行成功
定时任务已添加
日志正常输出
管理脚本已创建(可选)
至此部署完成! 服务将每10分钟自动执行一次数据处理任务。
关注北上广,一起学习,一起进步!有能集成