用system()执行shell脚本返回256.这是什么意思?

我写了一个shell脚本来软重启HAProxy(反向代理)。 从shell中执行脚本。 但我想要一个守护进程来执行脚本。 这是行不通的。 system()返回256.我不知道这可能意味着什么。

 #!/bin/sh # save previous state mv /home/haproxy/haproxy.cfg /home/haproxy/haproxy.cfg.old mv /var/run/haproxy.pid /var/run/haproxy.pid.old cp /tmp/haproxy.cfg.new /home/haproxy/haproxy.cfg kill -TTOU $(cat /var/run/haproxy.pid.old) if haproxy -p /var/run/haproxy.pid -f /home/haproxy/haproxy.cfg; then kill -USR1 $(cat /var/run/haproxy.pid.old) rm -f /var/run/haproxy.pid.old exit 1 else kill -TTIN $(cat /var/run/haproxy.pid.old) rm -f /var/run/haproxy.pid mv /var/run/haproxy.pid.old /var/run/haproxy.pid mv /home/haproxy/haproxy.cfg /home/haproxy/haproxy.cfg.err mv /home/haproxy/haproxy.cfg.old /home/haproxy/haproxy.cfg exit 0 fi 

HAProxy使用用户haproxy执行。 我的守护程序也有自己的用户。 都与sudo运行。

任何提示?

Solutions Collecting From Web of "用system()执行shell脚本返回256.这是什么意思?"

据此,Perl的system()函数返回的值是乘以256的值,所以它实际上是以1退出的。 看来这也发生在C中 。

除非系统返回-1,否则它的返回值与来自等待系统调用系列(man 2 wait)的状态值格式相同。 有宏可以帮助你解释这个状态:

 man 3 wait 

列出这些宏和他们告诉你什么。

256代码可能意味着系统命令无法找到二进制文件来运行它。 请记住,它可能不会调用bash,并且可能没有路径设置。 再次尝试完整路径的二进制文件!

在守护进程中调用包含`kill'命令的脚本时,我遇到同样的问题。 守护进程必须关闭标准输出,stderr …使用像系统(“scrips.sh> / dev / null”)应该工作。