ifplugd报错"Incorrect action argument"且自定义脚本$2为空如何修复
错误诱因
- ifplugd.action语法错误:
down分支结束后缺少case语句必需的结束标记;;,导致无论传入的动作参数是up还是down,执行完对应分支的run-parts逻辑后都会继续落入*)错误分支,抛出「Incorrect action argument」报错,同时脚本异常退出。 - run-parts执行规则限制:
run-parts默认会忽略文件名包含特殊后缀(如.sh)、带点号、不符合^[a-zA-Z0-9_-]+$规则的脚本,你命名的ping.sh带了.sh后缀,默认不会被run-parts执行,自然无法触发ping逻辑,手动单独执行脚本时没有传入参数就会出现$2为空的情况。
修复方案
步骤1:修复ifplugd.action的语法错误
在down分支末尾添加;;分隔符,修正后的脚本如下:
#!/bin/sh set -e case "$2" in up) run-parts --arg="$1" --arg="$2" /etc/ifplugd/action.d/ ;; down) run-parts --reverse --arg="$1" --arg="$2" /etc/ifplugd/action.d/ ;; *) echo "ifplugd.action: Incorrect action argument" >&2 exit 1 ;; esac
修正后给脚本加执行权限:chmod +x /etc/ifplugd/ifplugd.action
步骤2:调整ping脚本命名符合run-parts规则
把/etc/ifplugd/action.d/ping.sh重命名为不带后缀的文件名,同时授予执行权限:
mv /etc/ifplugd/action.d/ping.sh /etc/ifplugd/action.d/ping_action chmod +x /etc/ifplugd/action.d/ping_action
步骤3:重启ifplugd服务生效
systemctl restart ifplugd
完成以上操作后插拔网线即可正常触发up分支的ping逻辑,同时不会再抛出参数错误。
内容的提问来源于stack exchange,提问作者tha duck
相关产品推荐
相关产品推荐

