linux crontabs无权限,Linux Crontab中无法执行sudo

数日前遇到BUG,crontab定时执行的脚本中有一个脚本没效果,但是putty登录服务器后手动执行同样的脚本,就有效果,很诡异。 后来一次直接在定时任务中执行sudo 拷贝文件,结果完全没效果。同样的命令手动执行又可以。于是,引发了我的思考。看来多次出现定时任务中脚本执行无效的是因为脚本中通过sudo来执行命令。口说无凭,还是走个例子来验证下。

先准备了一个生成文件的脚本,代码如下:

#!/bin/bash

#Program:

# Program mkfile by current minutes and seconds, e.g: 2247.txt

# Then copy the file to /root/ direcotry

#History

# 2017/04/07 Hack First release

cd /home/hack/demo

filename=`date "+%M%S"`.txt

touch $filename

sudo cp ./$filename /root/

手动执行脚本会让你输入当前用户密码。当前用户为hack 有sudo权限。

执行后会在当前目录生成一个文件。并且拷贝一份到/root目录。

8c6154f725c7c6b66f28632545f2211b.png

接下来在Crontab中执行mkfile.sh这个脚本,并将执行日志输出到mkfile.log中。

c6d05d0d8d8c0784e364ef267627a200.png

每两分钟执行一次。

登了几分钟后发现,当前目录生成了文件,但是/root/目录下没有文件。

d908e6625715a21c8a9d9d6a6b46ccde.png

执行日志mkfile.log文本如下:

400ef6ff10d1307d29196749a0ad4997.png

大概意思是sudo 需要在控制终端中才能执行。

在etc/sudoers中将下图框出的那一行注释掉,

1e83942d8f1d59892a51b5583bd76522.png

也就是说让sudo不一定非要在终端才能执行。但是过了几分钟,/root/下还是没有文件。

想到在手动执行sudo的时候需要输入当前用户的密码才行。crontab 又不会输入密码。于是。

7da1114e71a4bfc8372fd8402f951073.png

在ALL前面加了NOPASSWD后,过了几分钟终于在/root/下看到拷贝过去的文件了。

ee493c8b6ea58acbd3c0d821693a9e6a.png

注意:无论是注释掉 requiretty 还是 加NOPASSWD 都是不怎么安全的操作。此文只是用于解释crontab sudo 为什么执行无效。

如果业务需求定时任务中需要用到root权限的,还是直接用root用户的crontab 开定时任务吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值