微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 udev 规则触发后从脚本执行时,scp 执行失败 - 如果手动或通过 cron 执行,脚本有效

如何解决在 udev 规则触发后从脚本执行时,scp 执行失败 - 如果手动或通过 cron 执行,脚本有效

晚上好 我在一台旧笔记本电脑上设置了 proxmox 服务器,在那里我运行了几个虚拟机。我创建了一个 udev 规则,用于在断电时将文件 (uevent) 从主机 (Proxmox) 复制到其中一个 VM(家庭助理) 我遇到的问题是,当 udev 执行脚本时,scp 行超时。

从主机到虚拟机的 ssh 工作正常,我什至可以手动运行 scp 命令:

/usr/bin/scp -v /root/uevent1.json root@192.168.7.48:/root/config/BAT1

我也可以运行 udev 应该执行的脚本并且工作正常 (batupdate1.sh):

#!/usr/bin/bash
FILE=/sys/class/power_supply/BAT1/uevent
awk -F'=' 'BEGIN {printf "{"} /POWER_SUPPLY/  {printf "\"" $1 "\":\"" $2 "\","} END {print "}"}'  $FILE | sed 's/,}/}/' >/root/uevent1.json
/usr/bin/scp -v /root/uevent1.json root@192.168.7.48:/root/config/BAT1

udev 规则:

SUBSYstem=="power_supply",ACTION=="change",RUN+="/usr/local/bin/batupdate1.sh"

这是这个特定脚本的系统日志的样子:

: ADP1: RUN '/usr/local/bin/batupdate1.sh' /etc/udev/rules.d/80-local.rules:2
: Starting '/usr/local/bin/batupdate1.sh'
: '/usr/local/bin/batupdate1.sh'(err) 'Executing: program /usr/bin/ssh host 192.168.7.48,user root,command scp -v -t /root/config/BAT1'
: '/usr/local/bin/batupdate1.sh'(err) 'OpenSSH_7.9p1 Debian-10+deb10u2,OpenSSL 1.1.1d  10 Sep 2019'
: '/usr/local/bin/batupdate1.sh'(err) 'debug1: Reading configuration data /root/.ssh/config'
: '/usr/local/bin/batupdate1.sh'(err) 'debug1: Reading configuration data /etc/ssh/ssh_config'
: '/usr/local/bin/batupdate1.sh'(err) 'debug1: /etc/ssh/ssh_config line 19: Applying options for *'
: '/usr/local/bin/batupdate1.sh'(err) 'debug1: Connecting to 192.168.7.48 [192.168.7.48] port 22.'
: Spawned process '/usr/local/bin/batupdate1.sh' [30840] is taking longer than 59s to complete
: '/usr/local/bin/batupdate1.sh'(err) 'debug1: connect to address 192.168.7.48 port 22: Connection timed out'
: '/usr/local/bin/batupdate1.sh'(err) 'ssh: connect to host 192.168.7.48 port 22: Connection timed out'
: '/usr/local/bin/batupdate1.sh'(err) 'lost connection'
: Process '/usr/local/bin/batupdate1.sh' Failed with exit code 1.

我已经尝试了一切,启动并重新启动了 udev 服务,整个服务器,当从 udev 触发器调用时,似乎没有任何东西使 scp 从脚本中工作

任何帮助将不胜感激 谢谢!

解决方法

Per man udev(7):“请注意,由于 systemd-udevd.service 强制使用默认沙箱,因此在 udev 规则中不允许运行访问网络或挂载/卸载文件系统的程序”。>

实现该限制的配置文件似乎是 /lib/systemd/system/systemd-udevd.service

RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。