解惑

解己之惑,解人之惑

标签:error

Puppet运行脚本失败

puppet运行一个shell的脚本,如果是puppet的agent定期执行的,就是不成功,但是puppet agent -t运行就可以,开始以为是用户身份的问题,加了调试命令打出来的用户身份没有问题,脚本里面原来也有reboot也是不好使,但是加了sudo在前面就解决,就在那个命令前面也加了sudo,还是不好使,改成su再执行,依然不行,百思不得其解。

后来灵光一现,打印了命令行执行时的env,然后在脚本里面也把env输出了出来,通过puppet的service跑的时候果然env里面少了很多东西,仔细想想也了然,因为puppet的service的启动顺序是早于系统的那个profile的初始化的,所以很多环境变量没有被设置。

把在控制台直接跑的时候的env的结果保存下来并在脚本里面import进去再运行,果然没有问题。

这个很妖异的问题就这么解决了,命令行直接执行脚本以及puppet agent -t直接运行都没有问题,但是puppet的service自动触发的就是不行,源于service的启动早于系统的完全初始化。

导入的Reference不能编译

在工程中导入一个Web Service,发现竟然有编译错误,其他的工程没有问题,后来发现是因为工程的Namespace和工程的Service同名,也就是说,工程可能叫MyService,而创建的那个Web Service也叫MyService,所以创建出来的默认的namespace也是MyService,而VS创建的Web Service的stub会引用原来的namespace,所以就会导致引用MyService这个名字,但是编译器不知道你要找这个namespace还是类。因为处于同一个namespace里面的时候可以只用短类名就行了,但是生成的stub是使用全限定名的。

因为这个鄙视一下微软,因为这个是它推荐的命名规范导致的,而Java,package的名字推荐全部使用小写,而类名单词首字母大写,这样就不会出现类似的问题了。

© 2024 解惑

本主题由Anders Noren提供向上 ↑