gpt4 book ai didi

linux - init.d脚本挂了

转载 作者:可可西里 更新时间:2023-11-01 11:50:50 26 4
gpt4 key购买 nike

我有一个 init.d 脚本,如下所示:

#!/bin/bash
# chkconfig 345 85 60
# description: startup script for swapi
# processname: swapi

LDIR=/var/www/html/private/daemon
EXEC=swapi.php
PIDF=/var/run/swapi.pid
IEXE=/etc/init.d/swapi

### BEGIN INIT INFO
# Provides: swapi
# Required-Start: $local_fs
# Required-Stop:
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# Short-Description: startup script for swapi
# Description: startup script for swapi.php which processes actionq into switch
### END INIT INFO

if [ ! -f $LDIR/$EXEC ]
then
echo "swapi was not found at $LDIR/$EXEC"
exit
fi

case "$1" in
start)
if [ -f $PIDF ]
then
echo "swapi is currently running. Killing running process..."
$IEXE stop
fi
$LDIR/$EXEC >> $LDIR/swapi.log & MYPID=$!
echo $MYPID > $PIDF
echo "swapi is now running."
;;
stop)
if [ -f $PIDF ]
then
echo "Stopping swapi."
PID_2=`cat $PIDF`
if [ ! -z "`ps -f -p $PID_2 | grep -v grep | grep 'swapi'`" ]
then
kill -9 $PID_2
fi
rm -f $PIDF
else
echo "swapi is not running, cannot stop it. Aborting now..."
fi
;;
force-reload|restart)
$0 stop
$0 start
;;
*)
echo "Use: /etc/init.d/swapi {start|stop|restart|force-reload}"
exit 1
esac

然后我有一个 keepalive cronjob,如果 pid 下降,它会调用它。问题是每当我像 cron 作业一样运行它时,keepalive 脚本就会挂起(即 run-parts/var/www/html/private/fivemin),(keepalive 脚本在/var/www/html/private/fivemin 中) .

我的 init.d 脚本中是否缺少某些奇怪的东西?

我已经为这个问题绞尽脑汁好几个小时了!我在 centos4 顺便说一下。

感谢您的帮助。-埃里克

编辑:

keepalive/cronjob 脚本被简化为一个简单的测试:

#!/usr/bin/php
<?

exec("/etc/init.d/swapi start");

?>

奇怪的是 swapi.php 的错误输出像正常的 cron 输出一样被放入/var/spool/mail 中,只是我将所有输出转储到 init.d 脚本中的 swapi.log 中?

当我从 cli 运行 keepalive.php 时(作为/的根),它的运行完全符合我的预期。

当keepalive运行ps aux | grep php 看起来像:

root      4525  0.0  0.0  5416  584 ?        S    15:10   0:00 awk -v progname=/var/www/html/private/fivemin/keepalive.php progname {?????   print progname ":\n"?????   progname="";????       }????       { print; }
root 4527 0.7 1.4 65184 14264 ? S 15:10 0:00 /usr/bin/php /var/www/html/private/daemon/swapi.php

如果我这样做:

/etc/init.d/swapi stop

然后从 cli 中不再列出这两个程序。

Swapi ls -l 看起来像:

-rwxr-xr-x  1 5500 5500 33148 Aug 29 15:07 swapi.php

这是 crontab 的样子:

*/5 * * * * root run-parts /var/www/html/private/fivemin

这是 swapi.php 的第一部分

#!/usr/bin/php
<?
chdir(dirname( __FILE__ ));
include("../../config/db.php");
include("../../config/sql.php");
include("../../config/config.php");
include("config_local.php");
include("../../config/msg.php");

include("../../include/functions.php");

set_time_limit(0);
echo "starting @ ".date("Ymd.Gi")."...\n";
$actionstr = "";
while(TRUE){

我修改了 init.d 脚本并将 init 放在变量声明之上,这没有什么不同。

最佳答案

答案是 bash 保持打开状态,因为我的 init.d 脚本没有重定向 stderr 输出。我现在将其更改为

$LDIR/$EXEC &> $LDIR/swapi.log & MYPID=$!

现在它可以完美运行。

感谢大家的帮助!

关于linux - init.d脚本挂了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3589786/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com