script run how linux bash centos init.d

how - run bash script on boot linux



Init.d script colgando (3)

Tengo un script init.d que se ve así:

#!/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

Y luego tengo un cronjob keepalive que llama a esto si el pid cae. El problema es que ese guión keepalive se cuelga cada vez que lo ejecuto como un trabajo cron (es decir, run-parts / var / www / html / private / fivemin), (el script keepalive está en / var / www / html / private / fivemin) .

¿Hay algo funky en mi script de init.d que me falta?

¡He estado trabajando duro en este problema durante horas! Estoy en centos4 por cierto.

Gracias por cualquier ayuda. -Eric

EDITAR:

La secuencia de comandos keepalive / cronjob se simplificó para probar de forma simple:

#!/usr/bin/php <? exec("/etc/init.d/swapi start"); ?>

Lo extraño es que la salida de error de swapi.php se coloca en / var / spool / mail como salida cron normal, excepto que tengo toda la salida en el swapi.log en el script init.d?

Cuando ejecuto keepalive.php desde cli (como root desde /) funciona exactamente como lo esperaría.

Cuando keepalive corre ps aux | grep php se ve así:

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

Y si hago un:

/etc/init.d/swapi stop

desde cli, ambos programas ya no están listados.

Swapi ls -l se ve así:

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

Así es como luce el crontab:

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

Aquí está el primer bit de 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){

Modifiqué el script init.d y puse init sobre las declaraciones de variables, no hizo la diferencia.


Asegúrese de que su secuencia de comandos tenga los permisos de ejecución correctos , el propietario correcto y las primeras líneas se verán así:

#!/usr/bin/php <?php


Cuando ejecuta un comando desde cron , el entorno no es el mismo que cuando se ejecuta desde la línea de comando bash después de iniciar sesión. Sospecho que en este caso el sh no puede entender swapi.php como un comando PHP.

Haz un

which php

para ver dónde está tu php binario y añádelo a tu script init.d

PHP=/usr/bin/php ... $PHP $LDIR/$EXEC >> $LDIR/swapi.log & MYPID=$!

Probablemente no sea tan importante, pero es posible que desee redirigir la salida de la línea cron

0 * * * * /path/to/script 2>&1 >> /dev/null

por ejemplo.


La respuesta fue que bash permanecía abierto porque mi script init.d no estaba redirigiendo la salida de stderr. Ahora lo he cambiado a

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

Y ahora funciona perfectamente.

Gracias por ayudar a todos!