如何解决在 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 举报,一经查实,本站将立刻删除。