crontab ejecutándose como un usuario específico

19

Necesito ejecutar un script diariamente. El script debe ejecutarse como un usuario específico (ej. Usuario1) no como root. Así que puse el archivo cron en /etc/cron.d y puse el nombre de usuario en la línea (segunda columna). Pero da un error que dice que no se encuentra el comando. Sospecho que el script no se ejecutó como el entorno del usuario1. ¿Me he perdido algo?

Sam Kong
fuente
3
¿Puede mostrarnos la entrada crontab que está utilizando, por favor?
user9517

Respuestas:

33

Solo /etc/crontaby los archivos /etc/cron.d/tienen un campo de nombre de usuario. En ese archivo puedes hacer esto:

1 1 * * * username /path/to/your/script.sh

Desde el crontab de root sudo crontab -epuede usar:

1 1 * * * su username -c "/path/to/your/script.sh"

O puede usar el crontab real del usuario de esta manera:

sudo crontab -u username -e

La segunda columna en cualquier archivo crontab es la hora a la que desea que se ejecute el trabajo. ¿Te refieres al sexto campo?

Ladadadada
fuente
Archivo en /etc/cron.d tome un argumento de usuario: help.ubuntu.com/community/CronHowto#Advanced_Crontab y ¿por qué está haciendo "sudo su" si está ejecutando como root? En cualquier caso, deseará que "su -l" use el entorno de inicio de sesión para el usuario, ya que es probable que se trate de un problema de RUTA, según la descripción del problema.
cjc
¿No son los archivos en /etc/cron.d una extensión de / etc / crontab? En los sistemas tengo que entregar todos los archivos en /etc/cron.d tienen un nombre de usuario especificado.
user9517
Ah, de hecho. /etc/cron.d/archivos son parte de /etc/crontab. sudoTampoco tiene sentido. Quitaré esa parte.
Ladadadada
2
Con respecto a poner sudo en el crontab: (a) sudo su... generalmente es innecesario; sudo -u <user> <command>Suele ser suficiente. (b) sudo se ahogará en algunos sistemas si no hay un TTY conectado (como cuando lo ejecuta cron). Eso se puede arreglar en su archivo sudoers.
tylerl
4

Es posible que deba establecer la RUTA para ese usuario, si el ejecutable que está usando está en, digamos, / usr / local / bin. Para establecer la RUTA, ponga algo como esto antes de los cronjobs:

PATH=/bin:/usr/bin:/usr/local/bin

*/5 * * * * user1 sample_executable

La otra forma es especificar completamente la ruta a sample_executable en su cronjob, entonces:

*/5 * * * * user1 /path/to/sample_executable

Si sample_executable hace referencia a los ejecutables que no están en la RUTA estándar, debe usar la primera opción.

cjc
fuente
1

El directorio típico para crontabs de usuario está en / var / spool / cron / crontabs. El formato de archivo es el que no incluye el nombre de usuario. Las crontabs de usuario son propiedad del usuario y llevan el nombre del usuario con el modo 0600. Esto se maneja mejor escribiendo su archivo de pestañas y usándolo crontab -u username filenamepara configurar las entradas cron que desee para ese usuario.

Jeff Ferland
fuente