如何在Linux中安装screen?共享主机非root权限安装遇阻求助
无root权限下让Django持续运行的解决方案
既然你在共享虚拟主机上没有root权限,没法通过yum安装screen,那咱们换几个不需要root就能实现后台运行的方案,亲测实用:
方法一:用nohup(最省心,几乎所有Linux系统默认自带)
nohup是系统自带的工具,专门用来让命令在你退出终端后继续跑,还能把输出存到日志里方便排查问题。
- 先切换到你的Django项目根目录(就是有
manage.py的那个文件夹) - 执行这条命令就行:
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文件里,以后想看日志直接打开这个文件就行&:让进程在后台默默运行,不占着终端
- 要是想停掉服务,先找进程ID:
ps aux | grep manage.py,然后用kill [找到的进程ID]就可以终止了。
方法二:自己编译安装screen到个人目录(如果主机有编译环境)
如果你的共享主机有gcc这类编译工具,完全可以把screen装到自己的home目录下,不需要root权限:
- 先下载screen的源码包(这里用4.9.0版本举例,你也可以换最新稳定版):
wget https://ftp.gnu.org/gnu/screen/screen-4.9.0.tar.gz
- 解压源码包并进入目录:
tar -zxvf screen-4.9.0.tar.gz cd screen-4.9.0
- 配置安装路径到自己的个人目录(比如
~/local,这个目录需要自己先创建:mkdir -p ~/local):
./configure --prefix=$HOME/local
- 编译并安装:
make && make install
- 把安装好的screen添加到环境变量,这样每次登录都能直接用:
echo 'export PATH=$HOME/local/bin:$PATH' >> ~/.bashrc source ~/.bashrc
- 现在就可以正常用screen了:比如
screen -S django_session创建一个会话,在里面启动Django服务,按Ctrl+A+D就可以脱离会话,关了Putty进程也不会停,下次登录用screen -r django_session就能重新回到那个会话。
方法三:用Python的daemonize库把进程变成守护进程
如果主机允许用pip安装第三方库,也可以用Python的工具来实现后台运行:
- 先安装daemonize(加
--user参数装到个人目录,不需要root):
pip install daemonize --user
- 写个简单的启动脚本(比如叫
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()
- 运行脚本启动后台进程:
python start_django.py
- 要停服务的话,直接执行
kill $(cat /tmp/django_daemon.pid)就可以了。
小提醒:如果是生产环境,不建议用Django自带的runserver,最好搭配uWSGI/Gunicorn和Nginx,但如果是个人测试或者小站点,上面的方法完全够用。
内容的提问来源于stack exchange,提问作者SJ19




