Linux crontab下关于使用date命令和sudo命令的坑

想要在root 的crontab里面加一些任务计划,希望以www用户运行命令,并且将输出重定向到某处以当时时间命名的日志文件,大致如下

/usr/bin/sudo -u www /usr/local/php/bin/php /www/open/www.php  &> /var/log/xxx_cron_log/www_$(date +"%Y%m%d_%H:%M").log

此处有两个坑:

1、习惯上的`date +"%Y%m%d_%H:%M"` 和 $(date +"%Y%m%d_%H:%M")在crontab下不起作用,需采用如下形式 `date +"\%Y\%m\%d_\%H:\%M"` 和 $(date +"\%Y\%m\%d_\%H:\%M")

2、直接在crontab里以sudo执行命令无效,会提示 sudo: sorry, you must have a tty to run sudo .需要修改/etc/sudoers,执行visudo或者vim /etc/sudoers 将"Defaults  requiretty"这一行注释掉。因为sudo默认需要tty终端,而crontab里的命令实际是以无tty形式执行的。注释掉"Defaults  requiretty"即允许以无终端方式执行sudo

但是,这里关于安全性方面有一点需要注意

关于该配置项,说明如下Disable "ssh hostname sudo <cmd>", because it will show the password in clear.You have to run "ssh -t hostname sudo <cmd>".

该配置的作用是禁止执行"ssh hostname sudo <cmd>",因为这种方式会将sudo密码以明文显示,你可以运行"ssh -t hostname sudo <cmd>"来替代。开启的情况下,"ssh hostname sudo <cmd>"无法执行成功,关闭了之后,就没有这一层的检查了。

联想:想到top命令也是需要在终端下执行的,所以直接在shell脚本里调用top命令式无效的

时间: 2024-10-07 07:09:47

Linux crontab下关于使用date命令和sudo命令的坑的相关文章

Linux crontab下关于使用date命令的坑

在测试环境中,一开发同事反馈自己设置的crontab不生效,定时任务如下: */6 * * * * date >> /usr/local/log/log_$(date +%Y%m%d%H%M).txt 咋一看,好像没什么问题. 先按照思路来测试一下: 1. 直接在命令行中执行没有问题 # date >> /usr/local/log/log_$(date +%Y%m%d%H%M).txt 2. 查看/va/log/cron日志,也没发现问题 3. cron服务是正常的 4. 环境变

Linux系统技巧|对于Linux系统管理员有用的 sudoers 配置|如何配置 sudo 命令在运行时而不输入密码

本文标签:  Linux系统技巧 配置sudo命令 sudoers文件 Linux用户权限   互联网杂谈 假设你在只有自己使用的计算机上运行 Linux 系统,比如在笔记本电脑上,在每次调用 sudo 时需要输入密码,长期下来就会觉得很乏味.因此,在本指南中,我们将描述如何配置 sudo 命令在运行时而不输入密码. 此设置在 /etc/sudoers 文件中完成,这是使用 sudo命令的默认安全策略;在用户权限指定部分. 重要:在 sudeors 文件中,默认打开的 authenticate

linux限制root远程登录、su命令、sudo命令

su命令: 1.su  切换用户命令 例:su - aming 2.whoami  查看当前用户命令 3.pwd   查看当前目录 例:输入su aming也可以切换用户,但是目录不在自己用户目录下,如下: [[email protected] ~]# su aming [[email protected] root]$ pwd /root [[email protected] root]$ ls ls: 无法打开目录.: 权限不够 [[email protected] root]$ exit

Linux系统下给非root用户添加sudo权限

有时,在linux系统中非root用户运行sudo命令,会提示类似信息: xxx is not in the sudoers file. This incident will be reported. 这里,xxx是当前用户名,该用户无法执行sudo命令,这时候,解决方法如下: 1.进入超级用户模式.也就是输入"su -",系统会让你输入超级用户密码,输入密码后就进入了超级用户模式.(也可以直接用root登录): 2.给配置文件“/etc/sudoers”添加“写”权限.输入命令: c

linux常用命令:sudo 命令

sudo命令用来以其他身份来执行命令,预设的身份为root. 1.命令格式: sudo  [参数]  [命令] 2.命令功能: 功能:  sudo可以针对单个命令授予临时权限.用户也可以通过su切换到root用户运行命令,su启动一个root shell允许用户运行之后的所有的命令. 1)sudo与su的不同之处:sudo仅在需要时授予用户权限,减少了用户因为错误执行命令损坏系统的可能性:sudo也可以用来以其他用户身份执行命令.此外,sudo可以记录用户执行的命令,以及失败的特权获取. 2)提

十三、su命令、sudo命令、限制root远程登录

一.su命令 格式为su [-] username,后面可以跟-,也可以不跟.普通用户的su命令不加username时,就是切换到root用户.root用户也可以使用su命令切花到普通用户.该命令加上-后,会初始化当前用户的各种环境变量.示例加与不加-的区别,命令: # su user1 [[email protected] root]$ pwd /root [[email protected] root]$ ls ls: 无法打开目录.: 权限不够 [[email protected] roo

su命令、sudo命令、限制root远程登录

一:su命令 ● su 的用法: su [OPTION选项参数] [用户] -, -l, --login 登录并改变到所切换的用户环境: -c, --commmand=COMMAND 执行一个命令,然后退出所切换到的用户环境:语法:su username,临时切换到username用户或者su - username,切换到username用户,并初始化各种环境变量如果某个用户没有创建家目录,则需创建家目录,并将相关配置文件拷贝过来. 二:sudo命令 ● sudo(有时间限制)临时执行root命

su命令、sudo命令以及限制root用户远程登录

su命令 su:切换用户的命令.root用户切换到任何用户都不需要密码,普通用户切换到其他用户或者root用户都需要密码. whoami:查看当前是哪个用户. id:查看当前是哪个用户并列出详细信息. su 和 su - 的区别:su - 会彻底切换到某个用户,包括家目录.环境变量等等.一般切换用户就使用su - 用户名.直接su - 是切换到root用户. su - -c  "命令"  用户名:以某个用户的身份去执行某个命令.(不切换到用户) sudo命令 sudo:使某个指定的用户

linux系统下使用分区、格式化、挂载命令添加新硬盘

一.硬盘的接口类型 从整体的角度上,硬盘接口分为IDE.SATA.SCSI.光纤通道和SAS五种,IDE接口硬盘多用于家用产品中,也部分应用于服务器,SCSI接口的硬盘则主要应用于服务器市场,而光纤通道只在高端服务器上,价格昂贵.SATA是种新生的硬盘接口类型,还正处于市场普及阶段,在家用市场中有着广泛的前景. 二.linux的硬盘分区 linux磁盘的分区分为: primary(主分区).extended(扩展分区).Logical (逻辑分区)且主分区加上扩展分区的个数小于等于4个.且扩展分