Cron作业是Linux和Unix系统的重要组成部分。在克龙是一个软件实用程序,可在几乎所有默认Unix和Linux版本。它是一个基于时间的调度程序,可以在指定的日期或时间运行作业,例如命令和脚本。如上所述,它主要用于系统维护,但您可以将其用于任何目的。
您可能已经知道,Cron作业是在配置文件中维护的。您可以使用crontab命令中的-e选项编辑配置文件。该-l选项将显示或列出当前配置工作的用户。
$ crontab -e
您通常可以以root身份运行cron作业而不会出现任何问题。无论如何,大多数系统维护工作都需要以root用户或超级用户身份运行。但是,系统中的每个用户都可以拥有自己的crontab或cron作业。系统管理员或超级用户需要为用户提供显式权限才能运行cron。
Crontab权限
有两个文件控制crontab的权限:/etc/cron.allow和/etc/cron.deny。如果有cron.allow文件,则需要在文件中列出需要使用cron的用户。您可以使用cron.deny明确禁止某些用户使用cron。
如果两个文件都不存在,则只允许超级用户运行cron。那么,这完全取决于系统特定的配置。大多数配置不允许任何用户运行作业,而某些系统允许所有用户默认运行作业。
因此,第一步是在/ etc /文件夹中创建一个名为cron.allow的文件。将用户名添加到此文件以允许用户运行作业。
设置Cron Jobs
一旦设置了适当的权限,用户就应该能够使用crontab命令修改和运行作业。该-e选项允许而用户编辑和添加新的就业机会-l命令行选项可用于列出作业进行特定用户。
$ crontab -l
我将假设您熟悉cron作业格式以及如何设置作业。所以,我不打算进入cron作业格式的语法。
Cron Jobs作为其他用户
如果您是超级用户,则还可以修改或创建其他用户的cron作业。crontab命令行选项-u允许您指定用户名并编辑该用户的作业。要修改用户tom的cron作业,请使用以下命令。
$ crontab -u tom -e
以上允许您修改其他用户的cron作业。但有时,您希望在仍使用root或超级用户crontab的同时以另一个用户身份运行特定命令。您可以使用su或sudo命令来执行此操作。使用sudo -u或su <username> -c创建作业前缀命令时
1 2 * * * su username -c "/path/to/my/scriptfile.sh"
1 2 * * * sudo -u username "/path/to/my/scriptfile.sh"
故障排除
现有系统可能存在各种类型的问题,主要与文件权限有关。确保您拥有/ var / spool / cron文件的权限。大多数情况下,命令输出将告诉您需要哪些文件权限。
从命令提示符处执行要作为作业运行的命令。这可以让你弄清楚错误的大部分时间。
来自 http://www.lostsaloon.com/technology/how-to-run-cron-jobs-as-a-specific-user/
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
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
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.
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
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