0

我有一个发布以下内容的 python 服务。通过子进程调用命令:

RUNLEVEL=1 apt-get install <package>

这个包,作为它的安装的一部分,发出一个 systemctl status smb 命令,这个命令永远卡住了。给 RUNLEVEL=1 的原因是为了防止 nginx(包的依赖)一安装就在 80 端口启动。

关于什么可能是错误的任何想法?请询问更多信息。

编辑: systemctl 进程卡住等待寻呼机返回。寻呼机进程无限期地等待读取。

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。

4

2 回答 2

0

apt-get install如果提示用户输入,则可以挂起,但没有交互式输入。尝试添加选项以“假设用户会回答是”:

apt-get install --assume-yes <package>
于 2017-08-14T19:56:20.333 回答
0

好的,所以我终于找到了解决这个问题的方法。它与RUNLEVEL无关。基本上,每当一个进程产生 apt-get install 命令,并且包在它的安装过程中发出一个 systemctl 命令时,寻呼机(它被符号链接到更多)就会卡住。为了防止 systemctl 生成寻呼机,在生成 apt-get export SYSTEMD_PAGER= 之前(基本上将其设置为空字符串)

于 2017-08-18T20:43:48.440 回答