Имам 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 (т.е. run-parts /var/www/html/private/fivemin), (скриптът за поддържане на активността е в /var/www/html/private/fivemin) .
Има ли нещо странно в скрипта ми init.d, което ми липсва?
Разбивам мозъка си върху този проблем от часове! Аз съм на centos4 btw.
Благодаря за всяка помощ. -Ерик
РЕДАКТИРАНЕ:
Скриптът keepalive/cronjob беше опростен за тестване до просто:
#!/usr/bin/php
<?
exec("/etc/init.d/swapi start");
?>
Странното е, че изходът за грешка от swapi.php се поставя в /var/spool/mail като нормален изход на cron, с изключение на това, че целият изход се изхвърля в swapi.log в скрипта init.d?
Когато стартирам keepalive.php от cli (като root от /), той работи точно както бих очаквал.
Когато 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 над декларациите на променливите, това не направи разлика.
ls -l
в директорията на swapi.php). - person polemon   schedule 28.08.2010kill -15
, преди да направитеkill -9
. Вижте други скриптове в/etc/init.d
за примери. Може да няма никаква разлика, но трябва да преместите вашата INIT строфа над дефинициите на променливите. Ако правитеps -p
, не мисля, че имате нужда отgrep -v grep
(grep 'swapi'
може да не е необходимо, но е добре като проверка на разума). Наистина трябва да покажете вашия скрипт за поддържане на активността и неговия запис в cron. - person Dennis Williamson   schedule 28.08.2010