在 CentOS 中,nohup 命令用于在后台运行命令,即使关闭终端或断开连接,该命令也会继续运行。然而,nohup 本身并不提供直接的资源限制功能。要限制进程资源,可以使用 cgroups(控制组)或 systemd-run 命令。
安装 cgroup 工具(如果尚未安装):
sudo yum install libcgroup-tools
创建一个新的 cgroup:
sudo cgcreate -g cpu,memory:/mygroup
设置资源限制:
限制 CPU 使用率:
echo "50000" | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
echo "100000" | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.cfs_period_us
这将限制 CPU 使用率为 50%。
限制内存使用量:
echo "100M" | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
将进程添加到 cgroup:
假设你的进程 PID 是 1234,你可以将其添加到 mygroup cgroup:
echo 1234 | sudo tee /sys/fs/cgroup/cpu/mygroup/tasks
echo 1234 | sudo tee /sys/fs/cgroup/memory/mygroup/tasks
systemd-run 命令可以用来启动一个服务,并且可以设置资源限制。
systemd-run --scope -p CPUQuota=50% -p MemoryMax=100M -- mycommand
这将启动 mycommand 并限制其 CPU 使用率为 50%,内存使用量为 100MB。假设你想在后台运行一个 Python 脚本 myscript.py,并限制其 CPU 和内存使用:
# 创建 cgroup
sudo cgcreate -g cpu,memory:/mygroup
# 设置 CPU 限制
echo "50000" | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.cfs_quota_us
echo "100000" | sudo tee /sys/fs/cgroup/cpu/mygroup/cpu.cfs_period_us
# 设置内存限制
echo "100M" | sudo tee /sys/fs/cgroup/memory/mygroup/memory.limit_in_bytes
# 运行脚本并将其添加到 cgroup
nohup python myscript.py &
echo $! | sudo tee /sys/fs/cgroup/cpu/mygroup/tasks
echo $! | sudo tee /sys/fs/cgroup/memory/mygroup/tasks
systemd-run --scope -p CPUQuota=50% -p MemoryMax=100M -- python myscript.py
通过这些方法,你可以在 CentOS 中使用 nohup 启动进程,并限制其资源使用。