我有一个发布foll的python服务。通过子进程调用命令:
RUNLEVEL=1 apt-get install <package>
这个软件包作为其安装的一部分,会发出一个systemctl status smb命令,该命令将永远陷入困境。给出RUNLEVEL = 1的原因是为了防止nginx(包的依赖关系)在安装后立即在端口80上启动。
关于什么可能出错的任何想法?请询问更多信息。
编辑:系统进程暂停等待寻呼机返回。并且寻呼机进程无限期地等待读取。
root@64_29:~# ps -ef | grep smb
root 9528 9462 0 16:32 pts/2 00:00:00 /bin/systemctl status smb.service
root@64_29:~# strace -p 9528
Process 9528 attached
waitid(P_PID, 9529,
root@64_29:~# ps -ef | grep 9529
root 9529 9528 0 16:32 pts/2 00:00:00 pager
root@64_29:~# strace -p 9529
Process 9529 attached
read(2,
另外为了防止使用RUNLEVEL = 1,我在安装自定义包之前屏蔽了nginx,因此不再提供RUNLEVEL = 1.
答案 0 :(得分:0)
apt-get install
如果提示用户输入,则可以挂起,但没有交互式输入。尝试将选项添加到&#34;假设用户将回答是&#34;:
apt-get install --assume-yes <package>
答案 1 :(得分:0)
好的,所以我终于找到了解决这个问题的方法。它与RUNLEVEL无关。基本上每当一个进程生成apt-get install命令,并且包在它的安装过程中发出了一个systemctl命令时,寻呼机(符号链接到更多)就会卡住。为了防止systemctl产生分页器,在产生apt-get导出之前SYSTEMD_PAGER =(基本上将其设置为空字符串)