
Escribí un breve script de shell "wallch.sh" para cambiar aleatoriamente el fondo de mi escritorio:
DIR="/home/user/Wallpapers"
PIC=$(ls $DIR/*.jpg | shuf -n1)
FIL="file://"
gsettings set org.gnome.desktop.background picture-uri $FIL$PIC
Y lo copié en /bin/
y luego sudo chmod 755 /bin/wallch.sh
en él. Esto podría ejecutarse fácilmente desde la terminal sin problemas y sin ningún error.
Sin embargo, cuando agrego una línea en crontab (haciendo esto desde la terminal como usuario), como:
* * * * * /bin/wallch.sh
Simplemente no funcionaría. En teoría debería haberse ejecutado cada minuto.
/var/log/syslog
dice:
Feb 25 19:36:01 user-Ubuntu CRON[11762]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:36:01 user-Ubuntu CRON[11761]: (CRON) info (No MTA installed, discarding output)
Feb 25 19:37:01 user-Ubuntu CRON[11790]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:37:01 user-Ubuntu CRON[11789]: (CRON) info (No MTA installed, discarding output)
Feb 25 19:38:01 user-Ubuntu CRON[11828]: (user) CMD (/bin/wallch.sh # JOB_ID_3)
Feb 25 19:38:01 user-Ubuntu CRON[11827]: (CRON) info (No MTA installed, discarding output)
¿Alguna sugerencia?
Actualizar:
El script que escribí (tenga en cuenta que cambié el nombre del archivo, ahora es /bin/wallch
. Además, eliminé las líneas de comentarios que comenzaban con #
excepto el shebang):
#!/bin/sh
DIR="/home/user/Wallpapers"
PIC=$(ls $DIR/*.jpg | shuf -n1)
FIL="file://"
gsettings set org.gnome.desktop.background picture-uri $FIL$PIC
La stat /bin/wallch
salida:
user@user-Ubuntu:~$ stat /bin/wallch
File: `/bin/wallch'
Size: 484 Blocks: 8 IO Block: 4096 regular file
Device: 806h/2054d Inode: 130389 Links: 1
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2013-02-26 11:03:01.727198732 -0600
Modify: 2013-02-26 10:37:46.727135926 -0600
Change: 2013-02-26 11:02:06.215196433 -0600
Birth: -
user@user-Ubuntu:~$
¡Gracias por cualquier respuesta!
Respuesta1
Sí, puedes instalar cualquier paquete MTA. Si ya tiene un servidor SMTP (MTA) en algún lugar que pueda usar, elija nullmailer
. De lo contrario, podría optar por postfix
(requiere algo de trabajo) o courier-mta
que también viene con valores predeterminados sensatos (y es algo más fácil para principiantes, en mi opinión).
Los nombres de ancho fijo anteriores son nombres de paquetes en Ubuntu. Entonces apt-get install <packagename>
instalará el MTA. El problema principal parece ser que no configuró ningún MTA y, por lo tanto, cron
no puede enviar correo. El trabajo en sí no indica un error en la salida del registro que puedo ver.
Nota al margen: también puede suprimir cualquier resultado de sus trabajos agregando (a la línea del trabajo):
> /dev/null 2>&1
... e incluso suprimir los códigos de salida de error añadiendo (más):
|| /bin/true
... Sin embargo, no lo recomendaría. También configurar MAILTO
en su crontab
(ver man 5 crontab
) es otra opción aquí. Pero es un poco "global" para los respectivos crontab
:
MAILTO=""
Lo que cron
envía es la salida (stdout/stderr, si encuentra un MTA) del trabajo que ejecutó. Y lo hace por defecto, sí. Además, los códigos de salida de error (distintos de cero) harán que el resultado se envíe por correo.
Sin embargo, también debe poder ejecutar el trabajo, lo que en todos los casos requiere que el archivo sea ejecutable ( chmod a+x ...
) o que, en el caso de un script, anteponga la ruta al intérprete del script y que, en el caso de un script, , existe una línea hashbang adecuada al principio del archivo.
Respuesta2
use esta línea cron en su lugar
* * * * * DISPLAY=:0 GSETTINGS_BACKEND=dconf /bin/wallch.sh
También podría usar */2 en la columna de horas para un cambio de fondo cada dos horas (todas las horas pares)
Consejo fuera de tema: esta no es una regla, solo una forma de mantener los scripts separados, úselo /usr/local/bin
para sus scripts de administración. :)