您好,我正在尝试在服务器重新启动时启动一项新服务,但我在启动时收到此错误:“方法“启动”以状态 96 退出”。我的服务也处于“维护”状态。
当我禁用/启用它时,我的服务正在工作,但当我重新启动时(这是目标)。
我用谷歌搜索了以下错误,但无法弄清楚问题出在哪里:
错误日志:
svc.startd could not set context for method: chdir: Ce fichier ou ce répertoire n'existe pas
Method "start" exited with status 96
我的.xml:
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type='manifest' name='broker2'>
<service
name="application/broker2"
type="service"
version="1">
<instance name='default' enabled='true'>
<exec_method
type='method'
name='start'
exec='/lib/svc/method/svc-broker start'
timeout_seconds='30' >
<method_context working_directory='/users/adm0ardp'>
<method_credential user='adm0ardp' group='gpm0ardp' />
</method_context>
</exec_method>
<exec_method
type='method'
name='stop'
exec='/lib/svc/method/svc-broker stop'
timeout_seconds='3' >
<method_context working_directory='/users/adm0ardp'>
<method_credential user='adm0ardp' group='gpm0ardp' />
</method_context>
</exec_method>
</instance>
</service>
</service_bundle>
和我的剧本:
#!/usr/bin/sh
. /lib/svc/share/smf_include.sh
case "$1" in
start) script_path.ksh
;;
stop) script_path.ksh
;;
esac
exit 0
任何帮助都可能很棒。
该错误表明 cd/chdir 失败。用户 adm0ardp 是否正确指定(和拼写)并且能够 cd 到 /users/adm0ardp?
是
/users
指向其他地方的符号链接吗?目录是否/users
自动挂载?权限/users
本身会阻止用户adm0ardp看到/users/adm0ardp
吗?错误消息确实表明该目录不存在。我会使用 truss 或 dtrace 并观察svc.startd进程并查看执行时发生的情况svcadm enable
。问题原来是我的服务被调用的太早了,没法在其他服务之前启动。为了解决这个问题,我添加了对最后启动的服务之一的依赖——例如,这可能是 rlogin、ssh 等。
这是我在 .xml 中添加的代码: