小编Tom*_*ime的帖子

在 systemd 中,After= 和 Requires= 有什么区别?

我创建一个systemd。服务文件,我需要帮助理解之间的差异Requires=After=。该手册页说,Requires=“对其他单位提供配置需求的依赖。” 和After=“配置单元之间的排序依赖关系”。有什么不同?

systemd

90
推荐指数
3
解决办法
11万
查看次数

程序可以告诉它正在 sudo 下运行吗?

我有一个程序,如果它在“sudo”下运行,它的行为应该有所不同。有没有办法确定它是否在 sudo 下运行?

更新:有人问我为什么要这样做。在这种情况下,在使用 MacPorts 的 Mac 上有输出告诉您剪切和粘贴特定命令。如果 MacPorts 命令使用“sudo”运行,它应该在示例命令中包含 sudo:

$ sudo port selfupdate 
--->  Updating MacPorts base sources using rsync
MacPorts base version 2.2.1 installed,
MacPorts base version 2.2.1 downloaded.
--->  Updating the ports tree
--->  MacPorts base is already the latest version

The ports tree has been updated. To upgrade your installed ports, you should run
  port upgrade outdated

^^^^^^^^^ it would be really sweet if it output "sudo port upgrade outdated" instead.  It would be …
Run Code Online (Sandbox Code Playgroud)

linux unix sudo

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

将 RPM 名称解析为其组件

官方 RPM 工具包中是否有名称解析工具?

我有一个文件名列表。每个都是 RPM 包的文件名。我没有实际的包,只有文件名。对于每个我需要提取包名称和版本($NAME 和 $VERSION)。我需要这个的原因是我正在编写一个脚本,然后确保“yum install $VERSION”安装 $VERSION。这是构建包并验证它们是否正确上传的系统的一部分。

文件名列表如下所示:

$ cat /tmp/packages.txt
/home/builder/packages/testing-dev/CentOS/6/x86_64/emacs-mercurial-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/emacs-mercurial-el-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/mercurial-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/mercurial-hgk-2.8-3.el6.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/python-redis-2.8.0-2.el6.noarch.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/redis-2.6.16-1.el6.1.x86_64.rpm
/home/builder/packages/testing-dev/CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
Run Code Online (Sandbox Code Playgroud)

我发现以下代码是执行任务的 BASH 函数:

function parse_rpm() { RPM=$1;B=${RPM##*/};B=${B%.rpm};A=${B##*.};B=${B%.*};R=${B##*-};B=${B%-*};V=${B##*-};B=${B%-*};N=$B;echo "$N $V $R $A"; }

for i in $(</tmp/packages.txt) ; do
    parse_rpm $i
done
Run Code Online (Sandbox Code Playgroud)

有用。大多。有一些例外:

$ parse_rpm CentOS/6/x86_64/sei_dnsmaster-1.0-99.el6.x86_64.rpm
sei_dnsmaster 1.0 99.el6 x86_64
Run Code Online (Sandbox Code Playgroud)

请注意,它没有正确获取版本(应该是 1.0-99)

我想知道 (1) rpmdev 包中是否有一个工具可以正确执行此操作。(2) 如果没有,是否有我可以使用的官方正则表达式。(3) 那个正则表达式的python 等价物是什么?

提前致谢!

rpm

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

如何为我的域设置 Google ShortName 服务,以便不需要 FQDN

博客文章“为您的域提供 'tinyurl' 服务”说明了如何使用 Google Apps 为您的域设置 ShortName 服务。例如,如果您的域是example.com并且您使用 Google Apps,您可以将其配置http://go.example.com为您企业的个人 ShortName 服务。

注意:这不是创建一个供全世界使用的“tinyurl”服务。这是针对企业的。

拥有一个只有您的用户可以使用的短名称服务非常有用,这样您就可以创建指向内部页面的链接。您可以说“今天的午餐菜单位于http://go.example.com/lunch ” ,而不是告诉人们一个长而难懂的 URL 。博客文章记录了授权人们建立自己的链接的一些好处。(最重要的是:他们不必打扰您设置新链接!)

问题

系统的问题是 URL 仍然很长。人们宁愿在他们的网络浏览器中输入“go/lunch”并让它工作。遗憾的是,由于 HTTP 协议工作方式的技术问题,Google Apps 无法支持这一点。HTTP 1.1 中的“Host:”标头列出了用户在其 Web 浏览器中键入的域,而不是FQDN。换句话说,当 Google Apps 收到“ http://go/lunch ”的HTTP 请求时,网络服务器会收到“go”作为主机名。由于谷歌Apps的提供许多领域这项服务,如果你想它不能告诉go.example.comgo.some-other-example.com

因此,用户每次都必须输入“go.example.com/lunch”,这比“go/lunch”要长得多。

解决方案

谷歌可以通过使用网络 cookie 或其他一些方案来解决这个问题。没有一个是特别干净或容易的。在他们这样做之前,您可以通过设置自己的机器来解决问题,该机器将请求作为“go”接受并重定向它们。

服务器接受名为“go”的站点的 HTTP 请求并将请求重定向到go.example.com. 然后您创建正确的 DNS 记录以使其正常工作,并调整您的 DHCP 配置,以便您的笔记本电脑/工作站做正确的事情。

此服务器故障文档的重点是解释该过程,然后提供配置示例以帮助您为您的站点执行此操作。由于我无法访问或了解世界上的每个操作系统,因此我将其设为“社区 wiki”,以便人们可以填写配置片段以供他们使用。我已经把“TODO”放在特别需要改进的地方。

细节

在本例中,我们将使用“example.com”作为域。

第 1 步:以正常方式设置 Google Apps 服务。

go.example.com正常配置服务。测试它并确保类似的 URLhttp://go.example.com/foo有效。如果这不完整,请不要继续。这就像在你拥有一辆汽车之前试图修理你的汽车一样。

第 …

domain-name-system dhcp url service

13
推荐指数
1
解决办法
2506
查看次数

如何配置 systemd 以在重新加载时终止并重新启动守护进程?

我有一个老式的守护进程,我想使用 systemd 来控制它。当它的配置文件发生变化时,需要将其杀死并重新启动。换句话说,在编辑配置文件后,systemctl reload MYSERVICE应该终止进程并重新启动它。

尝试 1:尝试默认设置。这告诉 systemd 如何启动守护进程,而不是如何重新加载它。

[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple
Run Code Online (Sandbox Code Playgroud)

其结果是,startrestart工作,但reload给出了这样的错误:

# systemctl reload MYSERVICE
Failed to reload MYSERVICE.service: Job type reload is not applicable for unit MYSERVICE.service.
Run Code Online (Sandbox Code Playgroud)

尝试 2:告诉它如何终止进程。这会杀死进程,但 systemd 不会为我重新启动它。

[Service]
ExecStart=/usr/bin/MYSERVICE
Type=simple
ExecReload=/bin/kill -HUP $MAINPID
Run Code Online (Sandbox Code Playgroud)

...其次是...

# systemctl daemon-reload
# systemctl reload MYSERVICE
Run Code Online (Sandbox Code Playgroud)

...杀死进程,但它不会自动重新启动。

尝试 3:也使用 ExecReload 重新启动进程。这失败有几个原因:

ExecReload=/bin/kill -HUP $MAINPID ; /usr/bin/MYSERVICE
Run Code Online (Sandbox Code Playgroud)

...我收到的错误消息...:

# systemctl daemon-reload
# systemctl reload MYSERVICE
Job for MYSERVICE.service failed because the …
Run Code Online (Sandbox Code Playgroud)

systemd

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

为什么 yum 索引会损坏?

有时 yum 的缓存会损坏,我们会看到如下错误:

error: db3 error(-30974) from dbenv->failchk: DB_RUNRECOVERY: Fatal error, run database recovery
error: cannot open Packages index using db3 -  (-30974)
error: cannot open Packages database in /var/lib/rpm
Run Code Online (Sandbox Code Playgroud)

解决方法是rm -f /var/lib/rpm/__db*然后下一个“yum”命令重新生成数据。

我的问题是:可能导致这种情况的原因是什么?是否有一些常见的任务会忽略锁或有其他问题导致这种情况?

我们有数百台 CentOS 机器,没有任何模式可以看出这个问题。这可能是一个“百万分之一”的问题,经常看到大规模的问题。

注意:我意识到这是一个非常“开放式”的问题,但是如果答案找到了原因,我将返回并将问题变成与特定问题直接相关的更规范的问题。

centos yum rpm data-consistency

10
推荐指数
1
解决办法
1736
查看次数

我应该让电子邮件退回还是将其发送到黑洞?

我的机器上有很多未使用的(旧的、死的)帐户。他们中的许多人每天收到数以千计的电子邮件,都是垃圾邮件。

如果该帐户被某人使用,我会让电子邮件退回,以便任何试图联系他们的人都知道出了什么问题。但是,我不确定如何处理数百个用于其他目的的帐户,例如我曾经用于要求我提供电子邮件地址的网站的一次性帐户,或者我曾经在网页上列出的地址.

选项 1:将
所有邮件转发到这些帐户/dev/null。发件人没有收到退回邮件。

选项 2:
让电子邮件退回。

将电子邮件发送到的好处/dev/null是垃圾邮件发送者不能使用我来生成退回邮件(反向分散垃圾邮件)。即:伪造“来自”行成为他们不喜欢的人,然后使用我向该人发送大量退回邮件。

弹跳它们的好处是对我来说维护更少。我可以从我的别名文件中删除该项目,电子邮件就会退回。此外,我不断发现新的垃圾邮件陷阱并将它们添加到我的“垃圾邮件黑洞”列表中,这是浪费时间。

每种方法的优缺点是什么?

email spam blackhole email-bounces

8
推荐指数
3
解决办法
3890
查看次数

配置 haproxy 为某个 ACL 匹配返回 204

如果有人试图访问我的 Web 服务器上的特定路径,我想返回 HTTP 204 错误代码。我可以将我的一个网络服务器设置为返回 204 错误并将 haproxy 指向它作为后端。但是,由于没有发送任何信息,我认为这应该可以从 haproxy 本身完成。无需打扰我的实际 Web 服务器。

我尝试创建一个会产生 204 错误的后端,如下所示:

frontend ...
    ...
    acl is_always204 path_beg /thisone
    use_backend always204 if is_always204
    ...

backend always204
    errorfile 404 /etc/haproxy-shared/errors/204.http
Run Code Online (Sandbox Code Playgroud)

204.http 文件包含:

HTTP/1.0 204 No Content Cache-Control: no-cache Connection: close Content-Type: image/png

当我启动 haproxy 时,出现此错误:

parsing [/etc/haproxy/haproxy:51] : status code 404 not handled, error customization will be ignored.

我想我可能会以错误的方式解决这个问题。任何人都可以建议一种方法来强制 haproxy 为给定的 acl 匹配返回 204 吗?

haproxy

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

哪些域在其胶水记录中列出了我的服务器?

我的 DNS 服务器曾经是公司域的 DNS 服务器。然而他们搬到了别处。奇怪的是,多年后他们仍然在他们的 whois 记录中列出我的 DNS 服务器(或者更准确地说,在他们的胶水记录中)。

现在我很好奇是否还有其他域在做同样的事情。

有没有办法可以找到哪些域将我的服务器列为其名称服务器?

在过去,人们可以使用 whois 查询“主机记录”,但现在我看不到这样做的方法

domain-name-system whois domain-registration

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

可扩展到 1,000 个主机和 100,000 个变量的监控系统

假设我想监控 1,000 台主机。对于每台主机,我想要监控 100 个或更多变量:ping、磁盘 IO/延迟、RAM 空闲/交换/等,等等。每 5-10 分钟 100,000 个数据点,存储 5 年。

什么系统规模这么大?

如果我的主机数量是原来的 10 倍怎么办?那你会选什么?

monitoring

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