每当我登录时,我需要设置以下脚本作为root运行:
#!/bin/zsh
truncate -s 0 ~yourstruly/.juniper_networks/network_connect/ncsvc.log
我知道如何以根交互的方式运行脚本(即通过sudo
),但我不知道如何使脚本在登录时以非交互式的方式运行。
我该怎么做?
FWIW:脚本当前由root拥有,具有权限6755,被截断的文件也属于根用户并具有权限0644,但是当我运行脚本时,对truncate
的调用将失败,出现“权限拒绝”错误。
发布于 2013-03-01 16:30:42
脚本的权限与此无关。Linux上的在脚本中忽略Setuid和setgid位.和大多数其他的unices。
您可以配置sudo,使您可以使用NOPASSWD
标记运行此脚本,而无需指定密码。确保sudo
不需要连接到终端:关闭requiretty
选项。注意,NOPASSWD
-tagged规则必须先于允许您使用密码提示运行命令的任何其他规则,因为第一个匹配是适用的。所以运行visudo
:
Defaults !requiretty
kjo ALL = NOPASSWD: /path/to/nc-logs-truncate
kjo ALL = (ALL) ALL
将脚本的第一行改为#!/bin/zsh -f
,否则zsh将加载~/.zshenv
,这在这里是不可取的。
现在我已经回答了你的字面问题,这可能不是最好的方法。一个简单的chown kjo ~/.juniper_networks/network_connect/ncsvc.log
将确保日志文件属于您,这样您就可以随意截断它。
更好的方法是移动日志文件,而不是截断它:保存最近的日志通常是有用的(例如,如果nc失败,将工作日志与非工作日志进行比较)。给自己对目录的写权限(您可能已经拥有它了)
mv -f ~/.juniper_networks/network_connect/ncsvc.log ~/.juniper_networks/network_connect/ncsvc.log.0
touch ~/.juniper_networks/network_connect/ncsvc.log
或者,制作一个更统一的NC包,告诉ncsvc
用/var/log
编写它的日志,并将它的日志包含在logrotate
配置中。
https://unix.stackexchange.com/questions/66616
复制相似问题