项目需求,在Linux下做个定时任务,而且是普通用户下可控的。网上找资料,方向没找对,就暂时用root用户做定时任务。最后别人提示用sudo,才有了这篇文章。
下面就说一下方法:
1. 创建任务(普通用户)
crontab -e 编辑计划任务
加上任务,如下行
*/2 * * * * cd /home/sky/apache-activemq-5.11.1/bin/;./activemq start(每两分钟启动一次,见下面语法结构)
2. 给普通用户授权sudo(root用户)
给普通用户授权sudo,用sudo 提升普通用户service命令权限
1)切换root用户,可以用vim /etc/sudoers对文件编辑(先赋权限chmod u+w /etc/sudoers),但最好使用visudo命令编辑,原因两点:一是它能够防止两个用户同时
修改它;二是它也能进行有限的语法检查。
2)找到"root ALL=(ALL) ALL",在下面加一行“XXX ALL=(ALL) ALL”即完成授权
“XXX”是用户名。
3)此时该用户拥有root所有权限,要做一下限制,先说一下上面三个ALL的含义:
①网络中的主机名(建议用ALL,实际不确定远程主机名),
②目标用户,也就是以谁的身份去执行命令(建议ALL)
③命令(最好不用ALL,否则方法二就没意义了,多个命令逗号隔开),默认5分钟sudo密码过期,怕麻烦命令前加“NOPASSWD:”
所以上面增加内容应改为:
“XXX ALL=(ALL) NOPASSWD:/sbin/service”
3. 重新启动任务计划
方法一: 切换到root用户 service crond restart(安全性考虑,不建议此方法)
方法二: 切换普通用户,执行sudo service crond restart即可
4. 语法机构
minute hour day month dayofweek command
minute - 从0到59的整数
hour - 从0到23的整数
day - 从1到31的整数 (必须是指定月份的有效日期)
month - 从1到12的整数 (或如Jan或Feb简写的月份)
dayofweek - 从0到7的整数,0或7用来描述周日 (或用Sun或Mon简写来表示)
command - 需要执行的命令(1、多行命令用“;”或者“&&”隔开,“;”不管命令是否出错都会连续执行下去,“&&” 出错则停止。 2、可以是脚本)
(网上很多资料)
5. 常用命令
crontab –u //设定某个用户的cron服务,一般root用户在执行这个命令的时候需要此参数
crontab –l //列出某个用户cron服务的详细内容
crontab –r //删除某个用户的cron服务
crontab –e //编辑某个用户的cron服务
service crond start
service crond stop
service crond restart
service crond reload