当我直接运行 NMCLI 时,它在脚本中有效,但在 CRON 中运行时无效

当我直接运行 NMCLI 时,它在脚本中有效,但在 CRON 中运行时无效

这是在 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=2https://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对我有用。

相关内容