Come eseguire un processo cron come utente specifico?


66

Vorrei eseguire un lavoro cron come utente specifico sulla mia macchina. Come posso specificare l'utente per un cron job da eseguire come ?.

I lavori cron verranno eseguiti su un server (in esecuzione su Ubuntu 10.0.4). Gli "utenti" sono utenti creati appositamente per l'esecuzione di attività specifiche sul lato server. Questi "utenti" hanno in comune quanto segue:

  • Impossibile accedere al sistema
  • Accesso limitato a cartelle / file specifici

Risposte:


79

Supponendo che non si possa semplicemente accedere e aggiungerlo al crontab di quell'utente, inserire un file /etc/cron.d. Dovrebbe essere formattato come un normale cronjob, ma con un campo aggiuntivo. Prima del comando da eseguire e dopo il cronometraggio, inserire l'utente. Dovresti essere in grado di trovare esempi già presenti sul tuo sistema.

Esempio:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command

Penso che questa sia la risposta corretta. Dovrò cercare alcuni esempi e indagare ancora.
morphheous

2
Più uno da me, questo è il modo migliore per fare quello che vuoi. Guarda più precisamente nel file / etc / crontab e vedrai che dopo il modello temporale e prima del comando c'è scritto "root". Ciò significa che "root" esegue questi comandi. Aggiungi il tuo programma personale e invece di "root" usa qualsiasi utente. Inoltre, nota che se usi crontab per utente (come suggerito da Eric D) potresti perdere la funzionalità del crontab di sistema (/ etc / crontab e /etc/cron.d).
Patkos Csaba,

3
La soluzione preferibilmente immagino sarebbe quella crontab -u <user> -edi mantenere tutto in un unico posto, cosa che puoi fare come root. Mi piace raggruppare i miei lavori cron per funzione, tuttavia, anziché solo per utente, quindi questa è la soluzione preferibile per me.
Stuart H,

41

Come root, per modificare il cron di user1:

crontab -u user1 -e

Puoi anche iniziare il tuo comando con:

su user1 -c foo bar

Ma spesso, gli script stessi riducono il proprio accesso quando vengono avviati come root.


1

Lo cerco da un paio di settimane e alla fine ha funzionato ...

Crea il tuo script come utente1

ssh user1@ipaddress
nano hourly-event.sh

inserisci un comando

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

renderlo eseguibile

chmod 755 hourly-event.sh

modifica il crontab per user1

sudo crontab -u user1 -e

metti una linea in basso che punta ai tuoi script

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

exit - salvataggio delle modifiche (mostrerà una directory / tmp durante il salvataggio ... va bene)

attendere il turno del minuto

apri il tuo yay.txt appena creato

nano /home/user1/yay.txt

ora dovresti avere una finestra nano aperta con "YAY funziona" come prima e unica riga se la parte inferiore della tua finestra nano dice Nuovo file ... beh ... non so

puoi anche controllare la tua nuova voce crontab per user1 su: / var / spool / cron / crontabs / user1

PACE


0

A volte potresti volere che l'utente carichi il suo ambiente, specialmente quando usa "rbenv", "nvm", proprio così:

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

(qui il comando source ~/.bash_profilecaricherà l'ambiente Ruby o Node.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.