How to run a cron job as a specific user?
up vote
61
down vote
favorite
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
ubuntu security permissions cron cronjob
add a comment |
up vote
61
down vote
favorite
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
ubuntu security permissions cron cronjob
add a comment |
up vote
61
down vote
favorite
up vote
61
down vote
favorite
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
ubuntu security permissions cron cronjob
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
ubuntu security permissions cron cronjob
ubuntu security permissions cron cronjob
edited Jan 27 '17 at 17:15
random♦
12.7k84657
12.7k84657
asked Aug 2 '10 at 11:50
morpheous
1,57382528
1,57382528
add a comment |
add a comment |
4 Answers
4
active
oldest
votes
up vote
74
down vote
accepted
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:
#<timing> <user> <command>
11 * * * * root /usr/lib/command
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 justcrontab -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
add a comment |
up vote
38
down 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.
add a comment |
up vote
0
down 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
add a comment |
up vote
0
down vote
Sometimes you may want the user load his environment, especially when using "rbenv", "nvm", just like this :
0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...
(here the command source ~/.bash_profile
will load you Ruby or Node environment.
add a comment |
4 Answers
4
active
oldest
votes
4 Answers
4
active
oldest
votes
active
oldest
votes
active
oldest
votes
up vote
74
down vote
accepted
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:
#<timing> <user> <command>
11 * * * * root /usr/lib/command
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 justcrontab -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
add a comment |
up vote
74
down vote
accepted
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:
#<timing> <user> <command>
11 * * * * root /usr/lib/command
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 justcrontab -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
add a comment |
up vote
74
down vote
accepted
up vote
74
down vote
accepted
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:
#<timing> <user> <command>
11 * * * * root /usr/lib/command
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:
#<timing> <user> <command>
11 * * * * root /usr/lib/command
edited Jan 14 '14 at 11:35
Pere
719711
719711
answered Aug 2 '10 at 11:52
Daenyth
5,36212121
5,36212121
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 justcrontab -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
add a comment |
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 justcrontab -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
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
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
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
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
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
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
add a comment |
up vote
38
down 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.
add a comment |
up vote
38
down 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.
add a comment |
up vote
38
down vote
up vote
38
down 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.
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.
answered Aug 2 '10 at 11:58
Eric Darchis
1,078912
1,078912
add a comment |
add a comment |
up vote
0
down 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
add a comment |
up vote
0
down 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
add a comment |
up vote
0
down vote
up vote
0
down 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
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
edited May 8 '17 at 4:43
quanghgx
12
12
answered Apr 27 '13 at 16:49
user220364
29
29
add a comment |
add a comment |
up vote
0
down vote
Sometimes you may want the user load his environment, especially when using "rbenv", "nvm", just like this :
0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...
(here the command source ~/.bash_profile
will load you Ruby or Node environment.
add a comment |
up vote
0
down vote
Sometimes you may want the user load his environment, especially when using "rbenv", "nvm", just like this :
0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...
(here the command source ~/.bash_profile
will load you Ruby or Node environment.
add a comment |
up vote
0
down vote
up vote
0
down vote
Sometimes you may want the user load his environment, especially when using "rbenv", "nvm", just like this :
0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...
(here the command source ~/.bash_profile
will load you Ruby or Node environment.
Sometimes you may want the user load his environment, especially when using "rbenv", "nvm", just like this :
0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec ruby ...
(here the command source ~/.bash_profile
will load you Ruby or Node environment.
answered Nov 18 at 10:05
Siwei Shen申思维
58944
58944
add a comment |
add a comment |
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f170866%2fhow-to-run-a-cron-job-as-a-specific-user%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown