小编Jam*_*ady的帖子

以不同用户身份运行Linux服务的最佳实践

服务默认root在我的RHEL框上启动时启动.如果我没记错的话,对于使用init脚本的其他Linux发行版也是如此/etc/init.d.

您认为最好的方法是让流程作为我选择的(静态)用户运行?

我到达的唯一方法是使用类似的东西:

 su my_user -c 'daemon my_cmd &>/dev/null &'
Run Code Online (Sandbox Code Playgroud)

但这似乎有点凌乱......

是否有一些隐藏的魔法可以提供一种简单的机制来自动启动服务,就像其他非root用户一样?

编辑:我应该说我在这个实例中开始的过程是Python脚本或Java程序.我宁愿不在它们周围写一个原生包装器,所以不幸的是我无法像Black建议的那样调用setuid().

linux sysadmin rhel init.d

137
推荐指数
3
解决办法
25万
查看次数

如何写出有意义的文档字符串?

什么,在您看来是一个有意义的文档?你期望在那里描述什么?

例如,考虑这个Python类__init__:

def __init__(self, name, value, displayName=None, matchingRule="strict"):
    """
    name - field name
    value - field value
    displayName - nice display name, if empty will be set to field name
    matchingRule - I have no idea what this does, set to strict by default
    """
Run Code Online (Sandbox Code Playgroud)

你觉得这有意义吗?发布您的好/坏示例供所有人知道(以及一般答案,以便可以接受).

python comments docstring

25
推荐指数
4
解决办法
2万
查看次数

每次迭代更改Apache Bench使用的POST数据

我正在使用ab来进行一些负载测试,并且提供的查询字符串(或POST)参数在请求之间发生变化非常重要.

即我需要向URL发出请求,例如:

http://127.0.0.1:9080/meth?param=0
http://127.0.0.1:9080/meth?param=1
http://127.0.0.1:9080/meth?param=2
...
Run Code Online (Sandbox Code Playgroud)

适当地行使申请.

ab似乎只在启动时读取提供的POST数据文件一次,因此在测试运行期间更改其内容不是一种选择.

有什么建议?

apache performance benchmarking apachebench

15
推荐指数
1
解决办法
1万
查看次数

在许多不同的字符上拆分字符串

我想使用一个或多个分隔符分割字符串.

例如"a bc",分为""和"." 会给出列表["a","b","c"].

目前,我无法在标准库中看到任何内容,我自己的尝试有点笨拙.例如

def my_split(string, split_chars):
    if isinstance(string_L, basestring):
        string_L = [string_L]
    try:
        split_char = split_chars[0]
    except IndexError:
        return string_L

    res = []
    for s in string_L:
        res.extend(s.split(split_char))
    return my_split(res, split_chars[1:])

print my_split("a b.c", [' ', '.'])
Run Code Online (Sandbox Code Playgroud)

可怕!有更好的建议吗?

python string split

11
推荐指数
1
解决办法
9601
查看次数

Code golf:将多个排序列表组合到一个排序列表中

实现一种算法,将任意数量的排序列表合并为一个排序列表.目标是用您喜欢的任何语言创建最小的工作程序.

例如:

input:  ((1, 4, 7), (2, 5, 8), (3, 6, 9))
output: (1, 2, 3, 4, 5, 6, 7, 8, 9)

input:  ((1, 10), (), (2, 5, 6, 7))
output: (1, 2, 5, 6, 7, 10)
Run Code Online (Sandbox Code Playgroud)

注意:连接输入列表然后使用语言提供的排序功能的解决方案不符合高尔夫的精神,并且不会被接受:

sorted(sum(lists,[])) # cheating: out of bounds!
Run Code Online (Sandbox Code Playgroud)

除了其他任何东西,你的算法应该(但不一定)快得多!

清楚地说明语言,任何缺点和字符数.只在计数中包含有意义的字符,但可以随意为代码添加空格以用于艺术/可读性目的.

为了保持整洁,建议改进评论或在适当的时候编辑答案,而不是为每个"修订"创建新的答案.

编辑:如果我再次提交这个问题,我会扩展"无语言提供排序"规则为"不连接所有列表然后排序结果".连接然后排序的现有条目实际上非常有趣和紧凑,因此我不会回溯地引入它们中断的规则,而是可以自由地在新提交中使用更严格的规范.


灵感来自于在Python中组合两个排序列表

language-agnostic sorting algorithm merge code-golf

10
推荐指数
6
解决办法
7021
查看次数

代码覆盖工具如何在不同语言中工作?

大多数已建立的语言都有可用的可靠测试覆盖工具,但功能深度各不相同.

此外,所有各种VM和编译器都具有这样的异构结构,例如,编写代码覆盖工具必须是C中与Lisp完全不同的工作.

  • Python必须sys.settrace直接告诉你哪些行正在执行
  • Clover(for Java)使用自己的编译器并添加调试元数据(无论如何我上次使用它)
  • Emma(for Java)有一个ClassLoader,它可以动态重写字节码
  • COVER(用于Lisp)有一个注释传递来检测代码

我对不同语言的代码覆盖率的实现感兴趣:

  1. 获取C0覆盖的主要方法是什么,您可以在哪里跟踪已执行的代码行?我提到了上面的本机VM内省和静态和动态代码检测 - 还有其他方法吗?

  2. 与C0相比,获得更加开明的覆盖数据(如C1或C2)似乎是一种与语言无关的任务.对我来说是大卡诺的地图操纵吗?有关于如何实际操作的最佳实践吗?像模糊这样的现代逻辑技术会起作用吗?

  3. 测试覆盖范围的一个被忽视的方面是将结果显示给程序员,这对C1和C2数据越来越难.坦率地说,虽然他们完成了C0的工作,但我对大多数测试覆盖接口都不感兴趣; 您在覆盖数据中看到了哪些新颖直观的界面?

language-agnostic unit-testing code-coverage

8
推荐指数
1
解决办法
3512
查看次数

在Python生成器中使用for ... else

我非常喜欢Python的... else语法 - 令人惊讶的是它的适用频率,以及它如何有效地简化代码.

但是,我还没有想出一个在生成器中使用它的好方法,例如:

def iterate(i):
    for value in i:
        yield value
    else:
        print 'i is empty'
Run Code Online (Sandbox Code Playgroud)

在上面的例子中,我希望print只有在i空的情况下才能执行该语句.然而,无论长度如何,else只有方面breakreturn它总是被执行i.

如果不可能以for...else这种方式使用,那么最好的方法是什么才能使print语句只在没有产生的情况下执行?

python syntax for-loop yield generator

7
推荐指数
3
解决办法
5457
查看次数

DataDog 日志提取在 Kubernetes 集群上不起作用

我们按照这些说明使用 DataDog 的操作符在 Kubernetes 1.22 集群中设置 DataDog。这是通过 helm 安装的,没有任何自定义。

Operator、集群代理和每节点代理 Pod 均按预期运行。我们知道代理能够与 DataDog 端点成功通信,因为我们的新集群显示在 DataDog 的基础设施列表视图中。

然而,来自我们应用程序 Pod 的日志没有出现在 DataDog 中,我们正在努力找出原因。

我们确实确认了一些明显的事情:

  • agent.log.enabled在我们的代理规范中是正确的(下面包含完整的 YAML)。
  • 我们的应用程序 Pod 的日志存在于 中/var/log/pods/,并且包含我们期望的日志行。
  • DataDog 代理能够看到这些日志文件。

因此,代理与 DataDog UI 中可用的日志之间似乎出现了问题。有谁对如何调试这个有任何想法?


我们的代理配置:

apiVersion: datadoghq.com/v1alpha1
kind: DatadogAgent
metadata:
  name: datadog
  namespace: datadog
spec:
  agent:
    apm:
      enabled: false
    config:
      tolerations:
        - operator: Exists
    image:
      name: "gcr.io/datadoghq/agent:latest"
    log:
      enabled: true
    process:
      enabled: false
      processCollectionEnabled: false
  clusterAgent:
    config:
      admissionController:
        enabled: true
        mutateUnlabelled: …
Run Code Online (Sandbox Code Playgroud)

logging kubernetes datadog devops

6
推荐指数
1
解决办法
1891
查看次数

在Erlang中命名节点

我正在使用5.4文档中的分布式编程教程,并遇到了节点名称的问题.

jamess-macbook由于破折号,我的MacBook默认名称()与Erlang的节点命名方案不相符:

(salt@jamess-macbook)4> {my_process, pepper@jamess-macbook} ! start
** exception error: bad argument in an arithmetic expression
     in operator  -/2
        called as pepper@jamess - macbook
Run Code Online (Sandbox Code Playgroud)

我确信有一种简单的方法可以解决这个问题,除了重命名我想运行Erlang的所有机器,但我在文档中看不到它.

有什么建议?

erlang

5
推荐指数
2
解决办法
2514
查看次数

你在trigger.io中使用什么JavaScript框架?(骨干,淘汰赛,余烬,角)

您在Trigger.io中成功使用了哪些JavaScript框架?我的意思是客户端JS应用程序框架,如backbone,knockout,ember,angular?

我们在这里使用angular.js但使用路由器为我们的应用程序时,有一些显著的问题...查看详细信息在这里https://groups.google.com/forum/?fromgroups#!topic/angular/XGDRAskA8qs.Trigger.io和使用angular.js路由器不能一起工作.(至少我们无法让它工作)

您是否使用其他JS框架,您可以使用应用程序路由器功能与trigger.io一起正常工作?(我可以在ember或骨干中看到类似的路由器功能)

trigger.io forge

5
推荐指数
1
解决办法
1974
查看次数

重定向输出时cd不起作用?

这是一个益智游戏:任何人都可以解释为什么cd输出重定向到管道失败?

例如:

james@machine:~$ cd /tmp                          # fine, no problem
james@machine:~$ cd /tmp | grep 'foo'             # doesn't work
james@machine:~$ cd /tmp | tee -a output.log      # doesn't work
james@machine:~$ cd /tmp >out.log                 # does work
Run Code Online (Sandbox Code Playgroud)

在OSX,Ubuntu和RHEL上验证.

有任何想法吗?

编辑:似乎很奇怪,我正在输出cd?原因是它来自一个包含任意shell命令和日志条目并处理输出的函数.

linux macos bash cd built-in

4
推荐指数
1
解决办法
655
查看次数

nodejs表达和文件上传

好吧,所以我已经尝试过使用连接形式,但由于某些原因我无法让它工作,但我想我应该理解这是如何从头开始半无论如何.

我不明白我上传的multipart/formdata文件的位置,或者当我的应用程序发布到网址时如何在我的应用程序中访问它. - 我喜欢直接访问文件数据,并使用节点fs模块写入文件输出. - 例如:

    app.post('/testy', function(req, res){
       console.log(req.body);
       console.log(req.headers);
       res.redirect('back');

    });  

    app.get('/testy', function(req, res){
      res.send('<form method="post" action="/testy" enctype="multipart/form-data">'
        + '<p>Image: <input type="file" name="test" /></p>'
        + '<p><input type="submit" value="Upload" /></p>'
        + '</form>');
    });
Run Code Online (Sandbox Code Playgroud)

因此,实际记录的唯一req var是req标头,body是空的.(可能应该是我理解的).但我得到的是文件数据在哪里?寻找我想的$ _FILES数组的php等价物. - 这是我记录的标题.

'accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
'accept-language': 'en-us,en;q=0.5',
'accept-encoding': 'gzip,deflate',
'accept-charset': 'ISO-8859-1,utf-8;q=0.7,*;q=0.7',
'keep-alive': '115',
connection: 'keep-alive',
referer: 'http://127.0.0.1:3000/testy',
cookie: 'connect.sid=lDRpluTxjUJeuTmkXlybrYeZ.JYTB155s2DGce2dsyfv1Op5ISCY8uqyqJZK8NjlZ5jM; socketio=flashsocket',
'x-insight': 'activate',
'content-type': 'multipart/form-data; boundary=---------------------------5856401949371863571646035001',
'content-length': '30128' }
Run Code Online (Sandbox Code Playgroud)

任何关于我失踪的东西都会被人们所喜爱!

file-io node.js express

4
推荐指数
1
解决办法
1万
查看次数

分类EC2实例

有没有办法区分EC2实例集?

我的用例是我有一堆web层机器和一堆搜索层机器; 目前,跟踪每个实例正在执行的操作的唯一方法是使用自己的资源目录,如LDAP或数据库.

理想情况下,我希望能够从AWS API提供的元数据中确定机器的角色.

目前,我提出的唯一方法是在不同的安全组中拥有不同的机器角色(即使不是严格要求的).有没有更好的办法?

cloud amazon-ec2 amazon-web-services

3
推荐指数
1
解决办法
472
查看次数