Puppet Exec资源执行source命令报错:Could not find command 'source'问题求助
解决Puppet Exec执行
source /etc/profile时的"Could not find command 'source'"错误 我来帮你搞定这个问题,这是个典型的新手容易踩的小坑,先拆解原因,再给两种靠谱的解决方案:
为什么会报错?
source是bash(还有zsh等shell)的内置命令,它不是一个放在/bin或/usr/bin里的独立可执行程序。而Puppet的Exec资源默认会去你指定的path目录里找外部命令,自然找不到source,就会抛出那个错误。
两种可行的解决方法
方法1:显式调用bash执行source命令
这是最稳妥的方式,直接让bash通过-c参数来执行source操作,把你的Exec资源改成这样:
exec {'alias': command => 'bash -c "source /etc/profile"', path => [ '/bin/', '/sbin/' , '/usr/bin/', '/usr/sbin/' ], provider => shell, }
方法2:指定provider为bash
如果你想保持命令不变,可以把provider从shell改成bash,这样Puppet会直接用bash来执行命令,就能识别内置的source了:
exec {'alias': command => 'source /etc/profile', path => [ '/bin/', '/sbin/' , '/usr/bin/', '/usr/sbin/' ], provider => bash, }
额外提醒
这里要注意:source /etc/profile只会影响当前Puppet运行的那个bash进程,不会让已经登录的用户马上用到新别名。不过你在/etc/profile里配置的别名是对的,所有新登录的用户会话都会自动加载这个别名,Puppet执行source只是为了让当前Puppet进程能获取到新的环境变量(如果后续有依赖这个别名的资源的话)。
内容的提问来源于stack exchange,提问作者hariraj
相关产品推荐
相关产品推荐

