You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Linux中安装screen?共享主机非root权限安装遇阻求助

无root权限下让Django持续运行的解决方案

既然你在共享虚拟主机上没有root权限,没法通过yum安装screen,那咱们换几个不需要root就能实现后台运行的方案,亲测实用:

方法一:用nohup(最省心,几乎所有Linux系统默认自带)

nohup是系统自带的工具,专门用来让命令在你退出终端后继续跑,还能把输出存到日志里方便排查问题。

  1. 先切换到你的Django项目根目录(就是有manage.py的那个文件夹)
  2. 执行这条命令就行:
nohup python manage.py runserver 0.0.0.0:8000 > django.log 2>&1 &

给你拆解下这条命令:

  • nohup:让进程忽略终端退出的挂起信号,就算你关了Putty它也接着跑
  • python manage.py runserver 0.0.0.0:8000:启动Django服务,端口可以根据主机给的权限调整
  • > django.log 2>&1:把服务的正常输出和错误信息都写到django.log文件里,以后想看日志直接打开这个文件就行
  • &:让进程在后台默默运行,不占着终端
  1. 要是想停掉服务,先找进程ID:ps aux | grep manage.py,然后用kill [找到的进程ID]就可以终止了。

方法二:自己编译安装screen到个人目录(如果主机有编译环境)

如果你的共享主机有gcc这类编译工具,完全可以把screen装到自己的home目录下,不需要root权限:

  1. 先下载screen的源码包(这里用4.9.0版本举例,你也可以换最新稳定版):
wget https://ftp.gnu.org/gnu/screen/screen-4.9.0.tar.gz
  1. 解压源码包并进入目录:
tar -zxvf screen-4.9.0.tar.gz
cd screen-4.9.0
  1. 配置安装路径到自己的个人目录(比如~/local,这个目录需要自己先创建:mkdir -p ~/local):
./configure --prefix=$HOME/local
  1. 编译并安装:
make && make install
  1. 把安装好的screen添加到环境变量,这样每次登录都能直接用:
echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
  1. 现在就可以正常用screen了:比如screen -S django_session创建一个会话,在里面启动Django服务,按Ctrl+A+D就可以脱离会话,关了Putty进程也不会停,下次登录用screen -r django_session就能重新回到那个会话。

方法三:用Python的daemonize库把进程变成守护进程

如果主机允许用pip安装第三方库,也可以用Python的工具来实现后台运行:

  1. 先安装daemonize(加--user参数装到个人目录,不需要root):
pip install daemonize --user
  1. 写个简单的启动脚本(比如叫start_django.py),记得把路径换成你自己的:
from daemonize import Daemonize
import os
import sys

# 替换成你的Django项目根目录
project_dir = "/home/your_username/your_django_project"
os.chdir(project_dir)
sys.path.insert(0, project_dir)

# 替换成你的Django项目settings模块名
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "your_project.settings")

from django.core.management import execute_from_command_line

def main():
    # 启动Django服务,端口按需调整
    execute_from_command_line(["manage.py", "runserver", "0.0.0.0:8000"])

# PID文件存的位置,选个你有权限的目录就行
pid_file = "/tmp/django_daemon.pid"
daemon = Daemonize(app="django_daemon", pid=pid_file, action=main)
daemon.start()
  1. 运行脚本启动后台进程:
python start_django.py
  1. 要停服务的话,直接执行kill $(cat /tmp/django_daemon.pid)就可以了。

小提醒:如果是生产环境,不建议用Django自带的runserver,最好搭配uWSGI/Gunicorn和Nginx,但如果是个人测试或者小站点,上面的方法完全够用。

内容的提问来源于stack exchange,提问作者SJ19

火山引擎 最新活动