¿Cómo ejecutar un trabajo cron como usuario específico?

66

Me gustaría ejecutar un trabajo cron como usuario específico en mi máquina. ¿Cómo puedo especificar al usuario para que se ejecute un trabajo cron?

Los trabajos cron se ejecutarán en un servidor (se ejecuta en Ubuntu 10.0.4). Los 'usuarios' son usuarios que se han creado específicamente para llevar a cabo tareas específicas del lado del servidor. Estos 'usuarios' tienen lo siguiente en común:

  • No se puede iniciar sesión en el sistema
  • Tener acceso restringido a carpetas / archivos específicos
morfeo
fuente

Respuestas:

79

Suponiendo que no puede simplemente iniciar sesión y agregarlo al crontab de ese usuario, coloque un archivo /etc/cron.d. Debe formatearse como un cronjob normal, pero con un campo adicional. Antes del comando para ejecutar y después del tiempo, ponga al usuario. Debería poder encontrar ejemplos que ya estén en su sistema.

Ejemplo:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command
Daenyth
fuente
Creo que esta es la respuesta correcta. Tendré que buscar algunos ejemplos e investigar más.
Morpheous
2
Además de uno mío, esta es la mejor manera de hacer lo que quieres. Mire con mayor precisión en el archivo / etc / crontab y verá que después de la plantilla de tiempo y antes del comando hay una "raíz" escrita allí. Esto significa que "root" ejecuta esos comandos. Simplemente agregue su propio horario y en lugar de "root" use cualquier usuario. Además, tenga en cuenta que si usa crontabs por usuario (como lo sugiere Eric D) puede perder la funcionalidad del crontab de todo el sistema (/ etc / crontab y /etc/cron.d).
Patkos Csaba
3
Supongo que la solución preferible sería simplemente crontab -u <user> -emantener todo en un solo lugar, lo que puede hacer como root. Sin embargo, me gusta agrupar mis trabajos cron por función, en lugar de solo por usuario, por lo que esta es la solución preferible para mí.
Stuart H
41

Como root, para editar el cron del usuario1:

crontab -u user1 -e

También puede comenzar su comando con:

su user1 -c foo bar

Pero a menudo, los propios scripts reducen su propio acceso cuando se inician como root.

Eric Darchis
fuente
1

He estado buscando esto por un par de semanas y finalmente funcionó ...

Crea tu script como usuario1

ssh user1@ipaddress
nano hourly-event.sh

ingrese algún comando

#!/bin/bash
echo "YAY it works" > /home/user1/yay.txt

hacerlo ejecutable

chmod 755 hourly-event.sh

edite el crontab para user1

sudo crontab -u user1 -e

ponga una línea en la parte inferior que apunte a sus guiones

# m h  dom mon dow   command
*   *   *   *   *    bash ./hourly-event.sh

salir - guardar cambios (mostrará un directorio / tmp al guardar ... está bien)

espera el turno del minuto

abra su recién creado yay.txt

nano /home/user1/yay.txt

ahora debería tener una ventana nano abierta con "YAY funciona" como la primera y única línea si la parte inferior de su ventana nano dice Nuevo archivo ... bueno ... no sé

también puede verificar su nueva entrada crontab para user1 en: / var / spool / cron / crontabs / user1

PAZ

user220364
fuente
0

A veces es posible que desee que el usuario cargue su entorno, especialmente cuando usa "rbenv", "nvm", así:

0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...

(aquí el comando source ~/.bash_profilele cargará el entorno Ruby o Node.

Siwei Shen 申思维
fuente