![当我直接运行 NMCLI 时,它在脚本中有效,但在 CRON 中运行时无效](https://linux22.com/image/815035/%E5%BD%93%E6%88%91%E7%9B%B4%E6%8E%A5%E8%BF%90%E8%A1%8C%20NMCLI%20%E6%97%B6%EF%BC%8C%E5%AE%83%E5%9C%A8%E8%84%9A%E6%9C%AC%E4%B8%AD%E6%9C%89%E6%95%88%EF%BC%8C%E4%BD%86%E5%9C%A8%20CRON%20%E4%B8%AD%E8%BF%90%E8%A1%8C%E6%97%B6%E6%97%A0%E6%95%88.png)
这是在 Ubuntu 11.10 下
我有一个脚本,它启动 PPTP VPN 连接并获取几个文件,然后关闭连接。当我从终端提示符运行此脚本时,它运行正常;但是,当我安排它使用 CRON 运行时,nmcli
脚本中的命令会产生错误。VPN 连接配置为由任何用户使用,而不仅仅是我的帐户。
以下是脚本的相关行:
/usr/bin/nmcli con up id MyVPN
以下是在 CRON 中使用它时产生的错误:
** (process:6360): WARNING **: _nm_object_get_property: Error getting 'WirelessHardwareEnabled' for /org/freedesktop/NetworkManager: (9) Rejected send message, 2 matched rules; type="method_call", sender=":1.624" (uid=1000 pid=6360 comm="/usr/bin/nmcli con up id MyVPN ") interface="org.freedesktop.DBus.Properties" member="Get" error name="(unset)" requested_reply="0" destination="org.freedesktop.NetworkManager" (uid=0 pid=1029 comm="NetworkManager ") ** (process:6360): WARNING **:
_nm_object_get_property: Error getting 'WwanHardwareEnabled' for /org/freedesktop/NetworkManager: (9) Rejected send message, 2 matched rules; type="method_call", sender=":1.624" (uid=1000 pid=6360 comm="/usr/bin/nmcli con up id MyVPN ") interface="org.freedesktop.DBus.Properties" member="Get" error name="(unset)" requested_reply="0" destination="org.freedesktop.NetworkManager" (uid=0 pid=1029 comm="NetworkManager ") ** (process:6360): WARNING **:
_nm_object_get_property: Error getting 'WimaxHardwareEnabled' for /org/freedesktop/NetworkManager: (9) Rejected send message, 2 matched rules; type="method_call", sender=":1.624" (uid=1000 pid=6360 comm="/usr/bin/nmcli con up id MyVPN ") interface="org.freedesktop.DBus.Properties" member="Get" error name="(unset)" requested_reply="0" destination="org.freedesktop.NetworkManager" (uid=0 pid=1029 comm="NetworkManager ") ** (process:6360): WARNING **:
_nm_object_get_property: Error getting 'State' for /org/freedesktop/NetworkManager: (9) Rejected send message, 2 matched rules; type="method_call", sender=":1.624" (uid=1000 pid=6360 comm="/usr/bin/nmcli con up id MyVPN ") interface="org.freedesktop.DBus.Properties" member="Get" error name="(unset)" requested_reply="0" destination="org.freedesktop.NetworkManager" (uid=0 pid=1029 comm="NetworkManager ")
任何想法,将不胜感激!
答案1
原因是命令行不通过计划任务这是因为 VPN 详细信息(用户名、密码)位于密钥环中用户的帐户详细信息中。而 nmcli 需要 DBus 来检索信息。
也就是说,如果您想配置您的系统以使 nmcli 正常工作,您需要让 nmcli 与 CRON 为脚本提供的环境一起工作。
请参阅以下示例https://stackoverflow.com/questions/5819667/help-me-setup-a-cron-job-on-ubuntu 以及http://ubuntuforums.org/showpost.php?p=9016250&postcount=2 和https://wiki.archlinux.org/index.php/NetworkManager#Automatically_unlock_keyring_after_login
答案2
刚刚遇到过类似的问题,上述答案对我都不起作用。我最终用屏幕模拟了这个问题:
* * * * * /usr/bin/screen -dm
将上述行添加到 cron,让它运行一次,然后将其关闭。连接到您的屏幕会话(screen -r)。如果您正在检查屏幕会话是否已创建(使用ps
),请注意它们有时是大写的(例如ps | grep SCREEN
)
现在nmcli
类似的情况将会失败。
特别是,我注意到我的问题是,它nmcli dev wifi
可以执行得很好,但却nmcli nm wifi on
不能。
最终,对我来说,解决方案非常简单。我添加了一个sudo
。仅在 cron 中是必需的。不确定为什么这可以解决问题。
答案3
sudo su
以前crontab -e
对我有用。