PHP - Problema al crear un cron de usuario

 
Vista:
sin imagen de perfil

Problema al crear un cron de usuario

Publicado por victor (11 intervenciones) el 25/02/2013 18:08:32
Lo primero que quiero decir es que no se si este post debe ir en esta sección o por contra en la de Unix, de ser así, por favor moverlo.

El error en cuestión es el siguiente:
Código:
$path_file = "/var/spool/cron/crontabs/inv_daemon";
$file = fopen($path_file,'w+');
fwrite($file, $daemon, strlen($daemon));
fclose($file);
El error mostrado es el siguiente:
Código:
Warning: fopen(/var/spool/cron/crontabs/inv_daemon) [function.fopen]: failed to open stream: Permission denied ...

Warning: fwrite(): supplied argument is not a valid stream resource in ...

Warning: fclose(): supplied argument is not a valid stream resource in ...
Antecedentes, hay una página en el panel de administración que su función será la de configurar tareas que se ejecutarán cada 'x' tiempo elegido por un administrador.

Bien, pues por parte todo esta funcionando, la página está configurada y si configuro el cron manualmente lanza la página sin ningún problema.

El problema llega al hacer el submit de la pagina, su funcion es almacenar varios parámetros en la BD y posteriormente, guardar el cron en el crontab del usuario para que se quede guardada la tarea obviamente y es en ese momento en el que falla.

Como se puede leer en el código, dice que es problema de permisos pero para realizar pruebas le he asignado todos los permisos para todos los grupos y sigue dando el mismo mensaje.

¿Alguien tiene alguna idea?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil

Problema al crear un cron de usuario

Publicado por victor (11 intervenciones) el 26/02/2013 17:17:21
¿Algun admin puede mover el post a la sección Unix/linux a ver si allí tengo más suerte?

Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un cron de usuario

Publicado por xve (6935 intervenciones) el 26/02/2013 21:39:42
Hola Victor, revisa también que las carpetas tengan derechos de lectura para este usuario. puede ser que tengas derecho de lectura para el archivo, pero no en las carpetas.

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema al crear un cron de usuario

Publicado por victor (11 intervenciones) el 27/02/2013 09:41:18
Buenos dias, efectivamente era problema de permisos de sus carpetas contenedoras. Pero claro, hasta que punto es seguro hacer esto?, lo digo porque ... su ruta es var/spool/cron/crontab ahi.... cambiando todos los permisos de estas carpetas... en crontab puede haber mas crons de otros usuarios.

No sé si me estoy explicando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un cron de usuario

Publicado por xve (6935 intervenciones) el 27/02/2013 11:51:53
Hola Victor, la verdad es que no es nada seguro, al contrario, que si hay otros usuarios yo te aconsejaría que buscaras otra manera de hacerlo....

...por ejemplo podrías poner un cron que ejecutar tu php cada minuto u hora y desde ahí lo controlas tu, desde php sin tocar nada del servidor.

Espero que te sirva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema al crear un cron de usuario

Publicado por victor (11 intervenciones) el 28/02/2013 12:01:21
Buenos dias,

Efectivamente la idea es esa y está hecha pero... el problema viene al introducir el cron. Me explico:

El cron en cuestion es para enviar un correo semanalmente.
El php que realiza el envío está configurado y funcionando. El problema es configurar es introducir el cron.
He creado una pagina de administración en la cual el usuario introduce el dia.. hora... minuto.. etc... y luego le digo que ejecute el archivo php.

Es decir, una vez configurado el cron desde la administración hay que escribir en el crontab de un usuario particular, algo del tipo...

* 12 * * * php -f invitacion.php

y ahí viene el problema .Que al no tener permisos... no me deja escribir en el crontab y es más, he probado a cambiar los permisos de toda la ruta /var/spool/cron/crontab/usuario y entonces si me deja escribirlo, PEERO no lo ejecuta, realmente el cron esta guardado ya que lo he abierto y se encuentra ahí, pero el cron es como si estuviera desactivado.

Que pasa?, pues que al hacer crontab -e de nuevo para activarlo... me vuelve a dar el problema de que no tengo permisos para escribir en ese archivo, por lo que supongo que se habrán puesto de nuevo en toda la ruta, y es la pescadilla que se muerde la cola.

Alguna otra forma o posibilidad para hacerlo?

Gracias por la ayuda xve
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve
Val: 3.943
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema al crear un cron de usuario

Publicado por xve (6935 intervenciones) el 28/02/2013 16:40:51
Hola Victor, yo te recomendaría que lo hicieras de otra manera.

Prepara un cron para que ejecute cada hora tu script de php.
Cuando un usuario indica que quiere recibir el correo tal día a tal hora, al ejecutarse el php revisas si coincide con la información dada por el usuario (tendrás que guardarla de alguna manera en base de datos o archivo) y haces el envío.

Si mañana, tienes que enviar otro corro a otra hora, que aras otro archivo en el cron? y si tienes 1000 usuarios crearas mil archivos en el cron? creo que es mucho mejor controlarlo desde el mismo php...

Sobre lo que me comentas, revisa el fichero del cron, los derechos y propietario y grupo del fichero... al hacerlo desde php puede ser que el archivo sea del usuario del apache.

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Problema al crear un cron de usuario

Publicado por victor (11 intervenciones) el 01/03/2013 10:20:11
Buenos dias,

creo que he debido expresarme mal. Explicaré la situación paso a paso para no dejar nada en el tintero.

Elementos con los que contamos:

Página de administración (admin.php): Es una página a la que únicamente puede acceder un administrador de la web, y en ella puede configurar el cron que se va a ejecutar, es decir, minuto, dia, semana, etc.. y el nombre de la invitación que quiere enviar a los usuarios de la web.

Invitación (email_inv.php): Contiene la información que se le quiere enviar a los usuarios.

Página de envío (invitacion.php): Es la página que lanzará el cron que configura el administrador, es decir, cada minuto, hora etc... que diga el cron, se lanzará esta página.

Secuencia:
1- El admin configura el cron, será algo del tipo:
* 12 * * 2 /usr/bin/local/php - f /htdocs/invitacion.php

2- Cuando salte el cron, en este ejemplo todos los martes a cada minuto de las 12, se lanzará la página invitacion.php.
Esta página lo que hace es recoger un listado de emails de la base de datos y enviarle a todas esas direcciones un correo con el contenido de email_inv.php

Con esto creo haber contestado a las dudas que se podian plantear en los anteriores mensajes, siento no haberlo hecho antes.

Ahora bien, el problema que surge es cuando el admin quiere guardar el cron, en el crontab de un usuario creado específicamente para ello, es decir:

La pagina admin.php te muestra unos combos y tal para configurar el cron y una vez hecho debe escribir el fichero del crontab de un usuario, para ello realizo una escritura normal:
1
2
3
4
$path_file = "/var/spool/cron/crontabs/inv_daemon";
	$file = fopen($path_file,'w+');
	fwrite($file, $daemon, strlen($daemon));
	fclose($file);


Aquí retomo el post original, la escritura me daba error era debido a los permisos de toda la ruta de directorios, cambié para probar todos sus permisos y efectivamente ya escribía perfectamente en el fichero peeeeero, siempre tiene que haber un problema.
Cuando escribo este fichero (inv_daemon) desde la administración el cron no se ejecuta, es como si desinstalara el cron. Fui al crontab del usuario (inv_daemon), realizé un crontab -e, me dió el sistema el típico aviso de que está instalado el cron, y empezó a funcionar pero por crontra, al hacer el crontab -e, me modifica los permisos de crontab del usuario a solo lectura. Por lo que si quiero cambiar el cron desde la web, me vuelve a decir que no puede escribir en el fichero puesto que no tiene permisos.

Esto es lo mas lioso, lo haré secuencialmente para que se entienda (con riesgo de hacer un mensaje demasiado extenso):

1- Doy permisos de escritura y ejecución a toda la ruta /var/spool/cron/crontab/inv_daemon.
2- Admin.php carga una nueva configuración para el cron y la guarda en el crontab de inv_daemon
3- El cron no se ejecuta porque aunque lo ha guardado no lo ha instalado.
4-Lo instalo manualmente mediante crontab -e. Ahora el cron se ejecuta, pero al instalar el cron, modifica los permisos de inv_daemon a solo lectura, por lo que si el admin intenta hacer una nueva configuración del cron, le da error por no tener permisos de escritura, por lo que me tocaría volver al paso 1.


Ahora sí espero haber escrito un post completo en el que se pueda ver bien todo el proceso y si alguien puede, me eche una mano, además que creo que es algo interesante.

Un saludo como siempre a toda la comunidad.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar