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

23 人关注

我写了一个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
  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

HAProxy是以用户haproxy执行的。我的守护进程也有它自己的用户。两者都用sudo运行。

有什么提示吗?

c
linux
shell
daemon
Jan Deinhard
Jan Deinhard
发布于 2010-09-17
4 个回答
Skilldrick
Skilldrick
发布于 2015-08-12
已采纳
0 人赞同

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

谢谢!所以是EPERM/*不允许的操作*/ ...但为什么...我用sudo启动守护程序。
mivk
Perl并不返回倍数的退出值。它返回一个16位的值,退出代码在高8位。这通常是相同的,但并不总是如此。
这也适用于大多数Linux/gcc二进制文件,不仅仅是Perl。
nategoose
nategoose
发布于 2015-08-12
0 人赞同

除非系统返回-1,否则其返回值与系统调用中的wait系列的状态值格式相同(man 2 wait)。 有一些宏来帮助你解释这个状态。

man 3 wait

列出了这些宏,以及它们告诉你的内容。

user2000703
user2000703
发布于 2015-08-12
0 人赞同