up vote59down votefavorite                        
6                        

I would like to run a cron job as a specific user on my machine. How may I specify the user for a cron job to run as?.

The cron jobs will be running on a server (running on Ubuntu 10.0.4). The 'users' are users that have been created specifically for carrying out specific server side tasks. These 'users' have the following in common:

  • Cannot log onto the system

  • Have restricted access to specific folders/files

                                                                                                                                               
           

3 Answers 正确答案                    

activeoldestvotes                        
           
up vote71down voteaccepted                        

Assuming you can't just log in and add it to that user's crontab, put a file in /etc/cron.d. It should be formatted as a normal cronjob, but with an extra field. Before the command to run and after the timing, put the user. You should be able to find examples already on your system.

Example:              (红帽中是  # vim /etc/crontab )               

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command
                       
shareimprove this answer                                
  • I think this is the correct answer. I will have to look for some examples and investigate some more. – morpheous Aug 2 '10 at 12:19                                        
  • 2                                        
    Plus one from me, this is the best way to do what you want. More precisely look in /etc/crontab file and you will see, that after the time template and before the command there is "root" written there. This means that "root" runs those commands. Just add your own schedule and instead of "root" use any user. Also, note that if you use per user crontabs (as sugested by Eric D) you may loose the functionality of the system wide crontab (/etc/crontab and /etc/cron.d). – Patkos Csaba Aug 2 '10 at 12:25                                        
  • 3                                        
    The preferably solution I guess would be to just crontab -u <user> -e to keep everything in one place, which you can do as root. I like to group my cron jobs by function, though, instead of just by user, so this is the preferable solution for me. – Stuart H Sep 5 '17 at 10:46                                        
           
up vote37down vote                        

As root, to edit the cron of user1:

crontab -u user1 -e
                           

You can also start your command with:

su user1 -c foo bar
                           

But often, the scripts themselves reduce their own access when started as root.

shareimprove this answer                                
           
up vote0down vote                        

I have been looking for this for a couple weeks and this finally worked...

Create your script as user1

ssh user1@ipaddress
nano hourly-event.sh
                           

enter some command

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

make it executable

chmod 755 hourly-event.sh
                           

edit the crontab for user1

sudo crontab -u user1 -e
                           

put a line at the bottom pointing to your script(s)

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

exit - saving changes (it will show a /tmp directory when saving... it's ok)

wait for the turn of the minute

open your newly create yay.txt

nano /home/user1/yay.txt
                           

you should now have a nano window open with "YAY it works" as the first and only line if the bottom of your nano window say New File... well.. i dunno

you can also check your newly crontab entry for user1 at: /var/spool/cron/crontabs/user1

PEACE

shareimprove this answer                                
           

来自  https://superuser.com/questions/170866/how-to-run-a-cron-job-as-a-specific-user