linux – 从rc.local或init.d启动进程时,startpar进程挂起
当从完整的init.d脚本(SysV样式)启动正在进行的(类似服务的)进程或从rc.local文件中执行简单的单行调用时,我有一个特殊的问题,如下所示:
su someuser -c "/home/someuser/watchdog.sh &" watchdog.sh包含这个: #!/bin/bash cd /home/someuser until ./eventMonitoring.py do echo "Program crashed with exit code $?. Starting again..." >&2 sleep 1 done 我总是在进程列表中留下一个额外的进程: UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 3048 1 0 1024 620 1 20:04 ? 00:00:00 startpar -f -- rc.local 如果我从init.d脚本启动它(来源:https://github.com/ivankovacevic/userspaceServices) 我得到了相同的进程,但它是startpar -f – userspaceServices 这个过程到底是什么?为什么在查看startpar的手册页时没有提到-f参数?作为另一个用户,在启动进程时我做错了什么,这个奇怪的startpar进程还需要保留(或启动)?为什么该进程不存在于任何其他init.d脚本中? 有人可以帮我解释一下这个问题吗? 注意:我的系统是Debian Wheezy 7.4.0 更新! 解决方法
我对此的进一步调查使我找到了解决方案.所以现在我知道如何正确地做到这一点,但我仍然不明白为什么startpar表现得像它一样.因此,如果有人愿意介入并解释,我非常愿意接受这个答案而不是这个答案.
基本上问题是我调用脚本时没有将标准输入,标准输出和标准错误重定向(或关闭)到文件或/ dev / null,并且由于某种原因startpar(“用于并行运行多个运行级脚本”) )进程,据我所知,是在启动过程中启动其他进程的进程,因此被阻止在我的这个脚本上.它确实启动了我的脚本,但它本身并没有完成运行,并且在进程列表中显示为阶段: UID PID PPID C SZ RSS PSR STIME TTY TIME CMD root 3048 1 0 1024 620 1 20:04 ? 00:00:00 startpar -f -- rc.local startpar的源代码如下:http://svn.savannah.nongnu.org/viewvc/startpar/trunk/startpar.c?root=sysvinit&view=markup 我浏览了它,并在我在stackoverflow上发布的一个新问题中进行了初步分析.在我在这里添加到我的问题的UPDATE中找到链接. 我使用的最终解决方案是: su someuser -c "nohup some_script.sh >/dev/null 2>&1 &" su – 将用户身份替换为某个用户 查看在我的系统上运行的其他已知守护进程的文件描述符,我看到重定向到/ dev / null是常见的事情.并且只有一些守护进程实际上完全关闭了stdin,stdout,stderr.例如,可以通过以下方式实现: su someuser -c "some_script.sh 0<&- 1>&- 2>&- &" 在实际意义上它是完全相同的,并且正是需要(任一选项)将进程干净地分离为后台守护进程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |