networking - 无权从 cron 控制网络

标签 networking cron

我正在使用命令 nmcli c up id networkname在脚本中更改网络。当我从终端运行脚本时,脚本运行良好,但是当我从 cron 运行脚本时,出现错误:

Error: Connection activation failed: Not authorized to control networking.

在网上搜索,我发现了一个 2011 年关于这个问题的错误报告:https://bugs.launchpad.net/ubuntu/+source/network-manager/+bug/681708 ,但没有分辨率。

为什么脚本在从终端运行时有效,而不是从 cron 运行?如果可能的话,我想避免把它放在根的 cron 中。

最佳答案

PolKit
决定是否允许访问您的脚本的守护进程称为 polkitd。
要获取有关出了什么问题的一些信息,您可以发出

nmcli general permissions
它将列出一些与 nmcli 相关的权限.您会注意到,从 cron 运行和登录时会给出不同的结果。
当前针对桌面使用的 dists(例如 Ubuntu 等)使用 Active alot 权限,这意味着它将授予登录到本地和事件 X11 session 的用户访问权限。
您也可以像这样在终端中运行 polkitd
killall polkitd  # first kill running polkitd
G_MESSAGES_DEBUG=all /usr/lib/policykit-1/polkitd
这将允许您查看 polkitd 正在做什么以及它正在做出什么决定。
解决方案
在 `/etc/polkit-1/localauthority/50-local.d/` 中添加一个 .pkla 文件,例如调用它`x.pkla`。 **Imortant:** 它需要在其他 e.g. 之后按字典顺序排序`org.freedesktop.NetworkManager.pkla` 或者那个文件会覆盖你可爱的文件。
adm 中放入类似的内容以授予用户权限团体。您还可以授予特定用户等。
[Let adm group modify system settings for network]
Identity=unix-group:adm
Action=org.freedesktop.NetworkManager.settings.modify.system
ResultAny=yes
如果您需要更多权限,例如启用/禁用 wifi,您可能需要向此文件添加多个部分。

关于networking - 无权从 cron 控制网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38855933/

相关文章:

python - Twisted 是 httplib2/socket 的替代品吗?

ios - 如何将 Apple 的 Reachbility 与 NSURLConnection 或 NSURLSession 结合使用?

java - TCPdump使用正则表达式解析序列号

Shell 脚本在 crontab 上无法正常工作,在手动调用时可以工作

java - 在 0.0.0.0 上启动自定义 JMX 服务器时出错

networking - 暴露 docker 端口和创建网桥(或覆盖层)有什么区别?

linux - cron 如何在内部安排作业?

bash - 如何在 crontab 上进行没有密码的 svn 更新

node.js - 在 CRON 作业中运行 NodeJS 异步函数是个好主意吗?

python - 通知作为 cron 作业