RH033-Unit 11-进程管理

http://www.ibm.com/developerworks/cn/linux/l-job-scheduling.html

Dealing with Stopped Jobs Sometimes when you try to logout, you'll get a message saying there are "stopped jobs". These stopped jobs are programs or processes which have been suspended by a ^Z (Ctrl - Z) command. You have to either make the job active again, or get it running properly in the "background" before you can logout. Stopping a program is useful if you want to temporarily suspend working on one program so you can do something else. To see a list of stopped jobs, type:
jobs
You will see a list of the stopped programs. Here's an example showing a stopped "learn" session:
[1] + Stopped learn
You can kill this stopped job by typing:
kill %1 (where %1 is the number of the job to be killed>
Or you can make the program active again by typing: fg %1 (where %1 is the number of the job)
- -- docker.service 单元已结束停止操作。 11月 13 11:21:33 iZ2zegwmsgi4mwoymq3o3fZ systemd[1]: Starting Docker Application Container Engine... -- Subject: docker.service 单元已开始启动 -- Defined-By: systemd -- Support: http://www.ubuntu.com/support -- -- docker.service 单元已开始启动。 11月 13 11:21:33 iZ2zegwmsgi4mwoymq3o3fZ dockerd[7733]: time="2025-11-13T11:21:33.714734033+08:00" level=info msg="Starting up" 11月 13 11:21:33 iZ2zegwmsgi4mwoymq3o3fZ dockerd[7733]: time="2025-11-13T11:21:33.715780390+08:00" level=info msg="detected 127.0.0.53 nameserver, assuming systemd-resolved, so using resolv.conf: /run/systemd/resolve/resolv.conf" 11月 13 11:21:33 iZ2zegwmsgi4mwoymq3o3fZ dockerd[7733]: failed to start daemon: Unable to get the TempDir under /home/docker: mkdir /home/docker/tmp: no space left on device 11月 13 11:21:33 iZ2zegwmsgi4mwoymq3o3fZ systemd[1]: docker.service: Main process exited, code=exited, status=1/FAILURE 11月 13 11:21:33 iZ2zegwmsgi4mwoymq3o3fZ systemd[1]: docker.service: Failed with result 'exit-code'. 11月 13 11:21:33 iZ2zegwmsgi4mwoymq3o3fZ systemd[1]: Failed to start Docker Application Container Engine. -- Subject: docker.service 单元已失败 -- Defined-By: systemd -- Support: http://www.ubuntu.com/support -- -- docker.service 单元已失败。 -- -- 结果为“RESULT”。 11月 13 11:21:35 iZ2zegwmsgi4mwoymq3o3fZ systemd[1]: docker.service: Service hold-off time over, scheduling restart. 11月 13 11:21:35 iZ2zegwmsgi4mwoymq3o3fZ systemd[1]: docker.service: Scheduled restart job, restart counter is at 3. -- Subject: Automatic restarting of a unit has been scheduled -- Defined-By: systemd -- Support: http://www.ubuntu.com/support -- -- Automatic restarting of the unit docker.service has been scheduled, as the result for -- the configured Restart= setting for the unit. 11月 13 11:21:35 iZ2zegwmsgi4mwoymq3o3fZ systemd[1]: Stopped Docker Application Container Engine. -- Subject: docker.service 单元已结束停止操作 -- Defined-By: systemd -- Support: http://www.ubuntu.com/support -- -- docker.service 单元已结束停止操作。 11月 13 11:21:35 iZ2zegwmsgi4mwoymq3o3fZ systemd[1]: docker.service: Start request repeated too quickly. 11月 13 11:21:35 iZ2zegwmsgi4mwoymq3o3fZ systemd[1]: docker.service: Failed with result 'exit-code'. 11月 13 11:21:35 iZ2zegwmsgi4mwoymq3o3fZ systemd[1]: Failed to start Docker Application Container Engine. -- Subject: docker.service 单元已失败 -- Defined-By: systemd -- Support: http://www.ubuntu.com/support -- -- docker.service 单元已失败。 -- -- 结果为“RESULT”。 这种问题如何解决
11-14
<think> 我们有两个问题需要解决: 1. 磁盘空间不足:'Unable to get the TempDir under /home/docker: mkdir /home/docker/tmp: no space left on device' 2. 启动请求重复过快:通常是由于服务启动失败后systemd过于频繁的重试导致 解决步骤: 第一步:解决磁盘空间不足的问题 - 检查磁盘空间使用情况 - 清理磁盘空间,特别是/home/docker所在的分区 第二步:解决启动请求重复过快的问题 - 调整docker服务的systemd配置,增加重启间隔和限制重启次数 详细步骤: 1. 检查磁盘空间: 使用命令 `df -h` 查看磁盘空间使用情况,特别是挂载点为`/home`的分区(因为错误提示是在`/home/docker`下创建目录失败) 如果发现磁盘空间不足,需要清理。 2. 清理磁盘空间: 可以清理的常见位置: - Docker的临时文件、未使用的镜像、容器、卷等 - 系统日志文件(/var/log) - 用户家目录下的大文件 针对Docker的清理: - 删除所有停止的容器:`docker container prune` - 删除所有未被使用的镜像:`docker image prune -a` - 删除所有未被使用的卷:`docker volume prune` - 删除所有未被使用的网络:`docker network prune` - 或者使用一条命令清理所有资源:`docker system prune -a -f --volumes` (注意:这会删除所有未被使用的资源,包括卷,谨慎使用) 但是注意:由于现在docker服务已经无法启动,可能无法使用docker命令。因此,我们需要手动清理一些文件。 手动清理: - 检查`/home/docker`目录(如果之前设置了Docker的根目录为/home/docker,则通常为`/var/lib/docker`,但这里错误提示在/home/docker,所以可能是自定义的数据目录) - 如果确定/home/docker是Docker的数据目录,可以尝试删除其中一些不用的数据(注意:删除Docker数据会导致容器和镜像丢失,请谨慎) 另外,也可以清理系统日志: - 清空系统日志:`journalctl --vacuum-size=200M` (将日志文件大小限制为200M) - 或者删除/var/log目录下的一些旧日志文件 还可以查找大文件: - 使用命令 `sudo find / -xdev -type f -size +100M -exec ls -lah {} \; | sort -k 5 -rh | head -n 20` 查找大于100M的文件 3. 调整systemd配置,防止重启过于频繁: 编辑docker的service文件,增加重启间隔和限制重启次数。 步骤: - 使用命令 `sudo systemctl edit docker.service` 来创建覆盖配置(或者直接编辑 `/etc/systemd/system/docker.service.d/override.conf`,如果目录不存在则创建) - 在编辑器中,添加以下内容: ``` [Service] Restart=on-failure RestartSec=5s StartLimitInterval=60s StartLimitBurst=3 ``` 解释: Restart=on-failure: 当服务失败时重启 RestartSec=5s: 每次重启等待5秒 StartLimitInterval=60s: 在60秒内 StartLimitBurst=3: 最多重启3次 - 保存退出,然后重新加载systemd配置:`sudo systemctl daemon-reload` 4. 清理Docker临时目录并尝试重启: 在清理了磁盘空间后,确保`/home/docker/tmp`目录可以被创建。如果该目录不存在,我们可以手动创建并设置正确的权限: ``` sudo mkdir -p /home/docker/tmp sudo chmod 755 /home/docker/tmp ``` 注意:如果之前设置了Docker的数据目录为/home/docker,那么整个/home/docker目录应该是属于docker用户和组的。但通常Docker服务启动时会自动处理目录权限,所以先确保空间足够。 5. 重启docker服务: sudo systemctl start docker 6. 如果问题仍然存在,查看详细日志: sudo journalctl -u docker.service -n 100 --no-pager 根据日志再进一步排查。 注意:如果/home/docker所在的分区空间确实不足,除了清理之外,还可以考虑将Docker的数据目录迁移到其他分区。但这需要先停止docker服务(如果服务已经停止则直接操作),然后移动数据并创建软链接或者修改docker的配置(daemon.json)中的data-root项。 迁移数据目录的步骤(可选): 1. 确保新的分区有足够空间,例如:/data/docker 2. 停止docker服务:`sudo systemctl stop docker` 3. 备份原有的docker目录:`sudo mv /home/docker /home/docker.bak` 4. 创建新的目录:`sudo mkdir -p /data/docker` 5. 复制数据(如果数据很重要且可移动):`sudo cp -rp /home/docker.bak/* /data/docker/` 6. 修改docker配置文件:编辑`/etc/docker/daemon.json`(如果不存在则创建),添加: { "data-root": "/data/docker" } 7. 启动docker:`sudo systemctl start docker` 但是注意:在磁盘空间不足的情况下,复制大量数据可能不可行,所以优先清理空间。 总结步骤: 1. 检查磁盘空间:`df -h` 2. 清理空间(根据情况选择): 清理系统日志:`sudo journalctl --vacuum-size=200M` 清理Docker资源(如果docker命令可用):`docker system prune -a -f --volumes` (谨慎使用,会删除所有未使用的资源) 手动删除大文件或迁移数据 3. 确保/home/docker/tmp目录存在(如果不存在则创建) 4. 调整docker的systemd配置,避免重启过于频繁 5. 重新加载systemd配置:`sudo systemctl daemon-reload` 6. 启动docker:`sudo systemctl start docker` 7. 检查状态:`sudo systemctl status docker` 如果清理后还是提示空间不足,可能是因为虽然删除了文件,但是被删除的文件还被某些进程占用(例如docker的进程没有完全退出),导致空间并未释放。此时可以尝试重启服务器,或者使用`lsof | grep deleted`找到被删除但仍被进程占用的文件,然后重启相关进程。 注意:在清理过程中,如果遇到文件被占用无法立即释放空间,可以尝试重启相关服务或者系统。 相关问题: 1. 如何检查Linux系统中各个磁盘分区的使用情况? 2. 如何清理Docker占用的磁盘空间? 3. 如何调整systemd服务的重启策略? 4. 如何迁移Docker的数据目录到新的位置? </think> ### 解决 Docker 服务启动失败(磁盘空间不足和启动频繁)的方法 #### 🔧 问题分析 1. **磁盘空间不足** `Unable to get the TempDir under /home/docker: mkdir /home/docker/tmp: no space left on device` - Docker 需要磁盘空间存储临时文件和镜像 - `/home/docker` 所在分区空间耗尽 2. **启动请求重复过快** `Job for docker.service failed because the control process exited with error code` - systemd 因磁盘错误反复尝试启动 - 默认重启策略过于激进 --- ### 🛠️ 完整解决步骤 #### 第一步:解决磁盘空间不足 ```bash # 1. 检查磁盘使用情况(重点关注/home分区) df -h /home # 查看/home分区使用率 du -sh /home/docker/* | sort -rh | head -10 # 找出占用最大的10个目录 # 2. 清理Docker残留文件(不启动Docker也能执行) sudo docker system prune -a -f --volumes # 强制清理所有未使用资源 # 3. 手动清理临时文件 sudo rm -rf /home/docker/tmp/* sudo rm -rf /var/lib/docker/overlay2/* # 清理容器层数据 # 4. 若仍空间不足,迁移Docker数据目录 sudo systemctl stop docker sudo mv /home/docker /home/docker.bak # 备份原目录 sudo mkdir /new/disk/path/docker # 在新磁盘创建目录 sudo ln -s /new/disk/path/docker /home/docker # 创建软链接 ``` #### 第二步:解决启动频繁问题 ```bash # 1. 修改Docker的systemd配置 sudo systemctl edit docker.service # 2. 在编辑器中添加以下内容(限制重启频率) [Service] Restart=on-failure # 仅在失败时重启 RestartSec=30s # 每次重启等待30秒 StartLimitInterval=300s # 300秒内最多重启5次 StartLimitBurst=5 # 3. 重载配置并重启服务 sudo systemctl daemon-reload sudo systemctl restart containerd # 先启动依赖项 sudo systemctl start docker ``` #### 第三步:验证修复 ```bash # 检查磁盘空间 df -h /home # 查看服务状态 sudo systemctl status docker --no-pager # 测试功能 sudo docker run --rm alpine echo "修复成功" ``` #### 📝 配置示例 **迁移数据目录的持久化配置**: 编辑 `/etc/docker/daemon.json`: ```json { "data-root": "/new/disk/path/docker", "storage-driver": "overlay2" } ``` --- ### 📊 预防措施 1. **设置磁盘空间监控** ```bash # 添加cron任务每周检查 echo "0 0 * * 0 df -h > /var/log/disk-usage.log" | sudo tee -a /etc/crontab ``` 2. **自动清理策略** ```bash # 每日凌晨清理Docker资源 echo "0 3 * * * docker system prune -af --volumes" | sudo tee -a /etc/crontab ``` 3. **日志轮转配置** 在 `/etc/logrotate.d/docker` 中添加: ```conf /var/lib/docker/containers/*/*.log { rotate 7 daily compress size=100M missingok delaycompress copytruncate } ``` > **技术说明**:Docker 默认使用 `/var/lib/docker` 存储数据,当自定义目录空间不足时会导致服务启动失败。通过 `data-root` 参数可迁移数据目录到更大分区[^1],配合 systemd 的 `StartLimit*` 参数可防止重启风暴[^2]。 --- ### 流程图:问题排查路径 ```mermaid graph TD A[启动失败] --> B{检查磁盘空间} B -->|不足| C[清理Docker资源] C --> D[迁移数据目录] B -->|充足| E[检查systemd日志] E --> F[修改重启策略] D & F --> G[重载配置] G --> H[重启服务] H --> I{启动成功?} I -->|是| J[完成] I -->|否| K[检查内核兼容性] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值