2011-02-08 13 views
5

Estoy tratando de ejecutar este sencillo daemon cliSystem_Daemon pudo abrir la secuencia /var/log/mydaemonname.log

function doTask(){ 

    echo 'mytest'; 
} 
// Include PEAR's Daemon Class 
require_once "/usr/share/php/System/Daemon.php"; 

// Bare minimum setup 
System_Daemon::setOption("appName", "mydaemonname2"); 

try{ 
// Spawn Deamon! 
System_Daemon::start(); 

// Your PHP Here! 
while (true) { 
    doTask(); 
} 

// Stop daemon! 
System_Daemon::stop(); 
} 
catch (Exception $e) { 
    echo 'Caught exception: ', $e->getMessage(), "\n"; 
} 



notice: Starting mydaemonname daemon, output in: '/var/log/mydaemonname.log' 
[Feb 08 12:17:23] warning: [PHP Error] file_put_contents(/var/log/mydaemonname.log): failed to open stream: Permission denied 

tanto en mi máquina local y en mi servidor dev.

Si intento más o menos crear y establecer chmod 777 permisos de ficheros a /var/log/mydaemonname.log recibí este otro error

[Feb 08 12:30:31] notice: Starting mydaemonname daemon, output in: '/var/log/mydaemonname.log' 
[Feb 08 12:30:31]  err: Unable to create directory: '/var/run/mydaemonname' [l:1366] 
[Feb 08 12:30:31] emerg: Unable to write pid file /var/run/mydaemonname/mydaemonname.pid [l:1272] 
[Feb 08 12:30:31]  info: Process was not daemonized yet, just halting current process 

y si intento configurar 777 permisos de ficheros en/var/Ejecutar/mydaemonname consigo esto en el archivo de registro

notice: Starting mydaemonname daemon, output in: '/var/log/mydaemonname.log' 
[Feb 08 12:17:06]  err: Unable to change group of file '/var/run/mydaemonname/mydaemonname.pid' to 0 [l:1425] 
[Feb 08 12:17:06]  crit: Unable to change identity [l:1281] 
[Feb 08 12:17:06] emerg: Cannot continue after this [l:1283] 

¿me puede ayudar, por favor?

adiós

+0

Es posible que desee establecer las opciones appRunAsUID, appRunAsGID, appPidLocation y logLocation. – rik

+0

Intenté con $ path = dirname (__ FILE__); System_Daemon :: setOption ("appName", "mydaemonnew"); System_Daemon :: setOption ("appRunAsUID", 0); System_Daemon :: setOption ("appRunAsGID", 0); System_Daemon :: setOption ("appPidLocation", $ path. '/ Mypid'); System_Daemon :: setOption ("logLocation", $ path. '/ Mylog'); – Whisher

+0

pero recibo [Feb 08 18:36:07] aviso: Iniciando mydaemonnew daemon, salida en: '/ home/whisher/public_html/speakage/mailbomber/tests/gearman/mylog' [Feb 08 18:36:07] err: desde la versión 0.6.3, el archivo pid debe estar en su propio subdirectorio como:% s/mydaemonnew/mydaemonnew.pid [l: 1339] [Feb 08 18:36:07] emerg: no se puede escribir el archivo pid/home/whisher/public_html/speakage/mailbomber/tests/gearman/mypid [l: 1272] [08 de febrero 18:36:07] info: El proceso no se ha demonizado aún, simplemente deteniendo el proceso actual Necesito más pistas :) – Whisher

Respuesta

4

Lo usuario Cómo se inicia el demonio como? si no es root, puede ser que responda:

Las opciones "appRunAsUID" y "appRunAsGID" configuran al usuario como el daemon debe cambiar para usarlo en el proceso secundario (daemonizado). Necesita comenzar como usuario "raíz" para poder tener el acceso correcto al archivo pid.

Por lo tanto, debe establecer "appRunAsUID" y "appRunAsGID" a un usuario sin privilegios que ejecutará la secuencia de comandos daemonizada, pero debe iniciar el proceso como "raíz" para poder escribir el usuario pid y switch.

+0

Muchas gracias, funciona :) – Whisher

+0

Intenté buscar documentación para obtener información como esta en vano.Gracias. – webkraller

0

Los mensajes sugieren que se trata de un problema de permiso, al configurar "appRunAsUID" y "appRunAsGID" = 0 (GID y UID del usuario root) se resuelve el problema.

Otro problema relacionado con este tipo de problemas es que. Desde la versión 0.6.3, el archivo pid debe estar en su propio subdirectorio. Cuando significa que la primera ejecución del demonio en appPidLocation por defecto que es:

/var/run/< appName>/< daemon_name> .pid

Y el segundo demonio que tal vez va a ejecutar deben coexistir en el mismo directorio. Cuando puede definir dinámicamente

 $path_pid = '/var/run/'.System_Daemon::getOption('appName'); 
     System_Daemon::setOption("appPidLocation",$path_pid.'/'.$pidFile); 
Cuestiones relacionadas