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

Jan*_*ard 17 c linux shell daemon

我已经编写了一个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
Run Code Online (Sandbox Code Playgroud)

HAProxy是用户haproxy执行的.我的守护进程也拥有它自己的用户.两者都与sudo一起运行.

任何提示?

Ski*_*ick 31

根据这个那个,Perl system()返回退出值乘以256.所以它实际上退出了1.这似乎也发生在C语言中.

  • Perl不返回乘以的退出值.它返回一个16位值,退出代码位于高8位.它通常是相同的,但并非总是如此. (4认同)
  • 谢谢!所以它是 EPERM /* 不允许操作 */ ...但是为什么...我用 sudo 启动守护进程。 (2认同)

nat*_*ose 6

除非系统返回-1,否则其返回值的格式与系统调用的等待系列中的状态值相同(man 2 wait).有些宏可以帮助您解释此状态:

man 3 wait
Run Code Online (Sandbox Code Playgroud)

列出这些宏以及它们告诉您的内容.