首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何将脚本设置为非交互的根运行?

如何将脚本设置为非交互的根运行?
EN

Unix & Linux用户
提问于 2013-03-01 15:54:29
回答 1查看 449关注 0票数 2

每当我登录时,我需要设置以下脚本作为root运行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#!/bin/zsh
truncate -s 0 ~yourstruly/.juniper_networks/network_connect/ncsvc.log

我知道如何以根交互的方式运行脚本(即通过sudo),但我不知道如何使脚本在登录时以非交互式的方式运行。

我该怎么做?

FWIW:脚本当前由root拥有,具有权限6755,被截断的文件也属于根用户并具有权限0644,但是当我运行脚本时,对truncate的调用将失败,出现“权限拒绝”错误。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2013-03-01 16:30:42

脚本的权限与此无关。Linux上的在脚本中忽略Setuid和setgid位.和大多数其他的unices。

您可以配置sudo,使您可以使用NOPASSWD标记运行此脚本,而无需指定密码。确保sudo不需要连接到终端:关闭requiretty选项。注意,NOPASSWD-tagged规则必须先于允许您使用密码提示运行命令的任何其他规则,因为第一个匹配是适用的。所以运行visudo

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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失败,将工作日志与非工作日志进行比较)。给自己对目录的写权限(您可能已经拥有它了)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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配置中。

票数 4
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/66616

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文