centos把可执行程序做成服务_让shell脚本在CentOS上作为守护进程运行?

编辑:由于某种原因,我的一半帖子被截断,不知道发生了什么.我会尽快更新并发布它在顶部更新.

编辑:我已经再次更新了帖子,抱歉这个问题不完整.

编辑(美国东部时间晚上8点55分):我更新了/srv/rhodecode/start.sh,就像史蒂文所说,仍然没有快乐.它继续像这样挂起:

[lpeabody@vcs rhodecode]$sudo /etc/init.d/rhodecode-server start

Starting rhodecode-server:

我已更新下面的脚本以显示更改.

在我的生活中,我从未写过shell或bash脚本.我正在尝试在CentOS上安装RhodeCode,并且有Debian和Gentoo的初始化脚本,但对于RedHat / CentOS则不然.因此我需要编写一个,因为我们的服务器环境仅限于运行CentOS 5.项目的源代码可以在Bitbucket here中找到.

我的想法是运行带有Celery和RabbitMQ的RhodeCode.它全部用Python编写,我使用virtualenv在其自己的独立虚拟容器中拥有环境.我得到了shell脚本here的想法.

我创建了一个名为rhodecode的系统用户并创建了目录/ var / run / rhodecode,它由rhodecode拥有.我还创建了生成.ini所在的/ var / www / rhodecode,以及/srv/rhodecode/start.sh,所有这些都归rhodecode所有.

权限:

[lpeabody@vcs run]$ll -a /var/run/rhodecode

total 12

drwxr-xr-x 2 rhodecode rhodecode 4096 Oct 10 15:57 .

drwxr-xr-x 21 root root 4096 Oct 10 16:07 ..

[lpeabody@vcs run]$ll -a /var/www/rhodecode

total 76

drwxr-xr-x 4 rhodecode rhodecode 4096 Oct 10 16:47 .

drwxr-xr-x 11 root root 4096 Oct 5 14:54 ..

drwxrwxr-x 3 rhodecode rhodecode 4096 Oct 5 19:40 data

-rw-r--r-- 1 rhodecode rhodecode 0 Oct 10 16:41 debug.log

-rw-r--r-- 1 rhodecode rhodecode 1466 Oct 10 16:41 error.log

-rw-rw-r-- 1 rhodecode rhodecode 6000 Oct 6 15:27 production.ini

drwxrwxr-x 2 rhodecode rhodecode 4096 Oct 5 18:37 repos

-rw-r--r-- 1 rhodecode rhodecode 44032 Oct 5 19:16 rhodecode.db

[lpeabody@vcs run]$ll -a /srv/rhodecode/

total 16

drwxr-xr-x 2 rhodecode rhodecode 4096 Oct 10 16:40 .

drwxr-xr-x 4 root root 4096 Oct 7 14:40 ..

-rwxr-xr-x 1 rhodecode rhodecode 277 Oct 10 16:40 start.sh

我有以下bash和shell脚本.

/srv/rhodecode/start.sh

#!/bin/bash

# run this as the rhodecode user!

WDIR=/var/www/rhodecode

VIRTUALENV_DIR=/opt/python_virtualenvironments/rhodecode-venv

export PYTHON_EGG_CACHE=/tmp/.python-eggs

source $VIRTUALENV_DIR/bin/activate

cd $WDIR

exec paster serve production.ini 1> debug.log 2> error.log

/etc/init.d/rhodecode-server

#!/bin/sh

#

# rhodecode-server RhodeCode server instance

#

#

# PATH=/sbin:/usr/sbin:/bin:/usr/bin

NAME=rhodecode-server

DESC=rhodecode-server

USER=rhodecode

PID_FILE=/var/run/rhodecode/pid

CMD=/srv/rhodecode/start.sh

LOCK_FILE=/var/lock/subsys/$NAME

. /etc/init.d/functions

RETVAL=0

remove_pid () {

rm -f ${PID_FILE}

}

start_rhodecode () {

daemon --user $USER --pidfile $PID_FILE $CMD

RETVAL=$?

[ $RETVAL -eq 0 ] && touch $LOCK_FILE

return $RETVAL

}

stop_rhodecode () {

killproc -p $PID_FILE

RETVAL=&?

rm -f $LOCK_FILE

rm -f $PID_FILE

return $RETVAL

}

restart_rhodecode () {

stop_rhodecode

start_rhodecode

RETVAL=$?

}

case "$1" in

start)

echo -n $"Starting $DESC: "

start_rhodecode

echo

;;

stop)

echo -n $"Stopping $DESC: "

stop_rhodecode

echo

;;

restart)

echo -n $"Restarting $DESC: "

restart_rhodecode

echo

;;

*)

echo $"Usage: $0 {start|stop|restart}"

RETVAL=1

;;

esac

exit $RETVAL

当我运行sudo /etc/init.d/rhodecode-server start然后运行ps -aux | grep贴纸,我可以看到来自/srv/rhodecode/start.sh的paster serve production.ini命令经过并使用rhodecode的用户ID(102)运行.

102 5222 0.7 7.8 144300 80988 ? Sl 16:08 0:00 /opt/python_virtualenvironments/rhodecode-venv/bin/python /opt/python_virtualenvironments/rhodecode-venv/bin/paster serve production.ini

但是,没有创建pid文件,因此我无法从init脚本中停止服务器.我不确定为什么守护进程没有创建pidfile. pid文件的路径有效且权限正确.思考?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_39867327

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值