我在Bash
脚本中遇到了一个奇怪的行为,我有Bash
脚本与PID 1
一起运行(entrypoint
Docker
容器,如果你不熟悉Docker,我假设你可以忽略这个信息)。
当我运行以下脚本时,SIGTERM
很快终止所有内容,一切似乎都很好(请记住sshd
服务不存在!我的整个系统只启动这个脚本不再运行tail
,但到目前为止这不是问题。)
#!/bin/bash
trap "pkill sshd" SIGTERM
export PATH=/usr/local/samba/bin/:/usr/local/samba/sbin/:$PATH
if [ -f /usr/local/samba/etc/smb.conf ]; then
exec /usr/local/samba/sbin/samba -i
else
tail -f /dev/null & wait ${!}
fi
当我删除trap
时出现问题。现在我的系统挂起了,似乎因为尾部直到运行并且由于某种原因没有结束。 (如果你比Docker更熟悉,Docker等待10秒,然后杀死容器,因为它没有响应SIGTERM
,如果你不熟悉Docker,请忽略这个信息)。
#!/bin/bash
export PATH=/usr/local/samba/bin/:/usr/local/samba/sbin/:$PATH
if [ -f /usr/local/samba/etc/smb.conf ]; then
exec /usr/local/samba/sbin/samba -i
else
tail -f /dev/null & wait ${!}
fi
有人可以向我解释究竟是什么问题吗?为什么假的trap
会使一切运转起来(虽然它几乎没有任何作用,但它的确有效,因为它就在那里)。
我还是想提一下,使用空的trap
:trap "" SIGTERM
没有帮助,陷阱中的某些东西应该可以工作(即使它什么都不做)。
希望有人可以帮助我,谢谢!