我们有两个的Windows Server,一个在2012 R2和其他2008 R2,它使用Apache HTTP服务器(httpd)2.4中的代理服务器/反向代理模式(的使用ProxyPass,ProxyPassReverse和虚拟主机配置)。两台服务器都使用来自 Apache Haus 的Apache 2.4.27 x64二进制构建。
我们有一些备份脚本在两台服务器上运行。他们停止所有服务(包括 Apache),然后进行备份并再次重新启动所有服务。
几年来(近 4 年),这些脚本运行良好。但是从 开始July 12, 2018,行为现在很奇怪。备份脚本正在执行它们的工作,停止所有服务,进行备份,但是现在,除 Apache 之外的所有服务都重新启动。
经过排查,发现Apache 2.4.27服务无法停止。使用服务控制台并尝试手动停止服务时,控制台显示“正在停止”并且没有任何反应。
所以我检查了正在运行的进程,看到一个httpd.exe进程正在运行。我试图终止该进程,但没有运气。
所以,我试过:
taskkill /im "httpd.exe" /f /t
Run Code Online (Sandbox Code Playgroud)
输出是:
ERROR: The process with PID 560 (child process of PID 480) could not be terminated.
Reason: There is no running instance of the task.
Run Code Online (Sandbox Code Playgroud)
所以我测试了pskill从 Sysinternals …
httpd service windows-server-2008-r2 windows-server-2012-r2 apache-2.4
是否有“推荐的方法”来禁用 Debian 中的服务?(禁用 = 服务已安装但不会在机器启动时自动启动。)
我知道您可以update-rc.d -f service remove(基本上删除了 中的链接rcX.d),但是这样做会丢失服务的序列号(SXXservice,XX 是序列号),当您想要重新启用该服务时,事情变得更加困难。我也知道我可以重命名链接,rcX.d这样它们就不会从S(或将它们移到其他地方)开始,但我想知道是否有一些“Debian批准的最佳实践”方法来做到这一点。
我只是看着我们的服务器,考虑禁用我们没有使用的任何服务,这让我想知道:
如果一个服务从来没有被任何东西调用来启动,它只是坐在“手动”上,在那种状态下它会占用任何系统资源吗?纯粹从系统资源 POV来看,将未使用的服务设置为“禁用”是否更好?
只是想知道资源是否有任何真正的区别?(忘记安全问题,这显然是另一个问题。)
我们有一些用 .NET 编写的 Windows 服务。它们在服务 mmc 中手动启动良好,但尽管设置为自动,但在打开(或重新启动)机器时它们永远不会启动。
更新在事件日志中,我没有看到“xyz 已启动”以及所有其他服务正在启动,而是看到“xyz 服务进入停止状态”。和一个单独的错误,指出“在等待来自 slsvc 服务的事务响应时达到超时(30000 毫秒)。”。
如果我手动启动它们,那么我会按预期在事件日志中得到一个正常的条目,一切都很好 - 直到下一个 Windows 更新补丁强制重新启动并且所有服务再次关闭。
有任何想法吗?我试过将它们设置为延迟启动,没有明显区别。
执行命令后,service --status-all我会得到我机器上所有服务的列表。我得到这样的输出。
[ ? ] acpi-fakekey
[ ? ] acpi-support
[ + ] acpid
[ - ] anacron
[ + ] apache2
[ + ] atd
[ - ] bootlogd
Run Code Online (Sandbox Code Playgroud)
是什么?意思?我一直假设一个+过程是开始的,一个-过程是停止的。服务前面是什么状态??
这是我的/proc/version文件的内容,因为它可以帮助任何人回答我。
Linux version 2.6.32-5-amd64 (Debian 2.6.32-45)
Run Code Online (Sandbox Code Playgroud)
提前致谢!
我在带有以下 systemd 服务文件的 Fedora 17 机器上运行 svnserve:
[Unit]
Description=Subversion Server
After=syslog.target network.target
[Service]
User=svn
Type=forking
Environment=HOME=/repos/svn
ExecStart=/usr/bin/svnserve --daemon --pid-file=/run/svnserve/svnserve.pid -r /repos/svn
PIDFile=/run/svnserve/svnserve.pid
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
只要 /var/run/svnserve 归 svn:svn 所有,这就可以正常工作,但是当该所有权重置为 root:root 时会在重新启动时中断。我想要的是添加一个 chowns 目录的预启动步骤。
不幸的是,我找不到任何关于 systemd 单元文件的真正文档,但我看到有些人在使用“ExecStartPre”,所以我尝试了这个:
ExecStartPre=/bin/chown svn:svn /run/svnserve
Run Code Online (Sandbox Code Playgroud)
遗憾的是,这会因“不允许操作”错误而失败,因此看起来 ExecStartPre 也以单元文件中指定的用户身份运行。
我还尝试让单元文件以 root 身份运行,然后通过 su 以 svn 用户身份启动 svnserve,但这产生了一个关于命令行无效的模糊错误。
systemd 单元如何在以特定用户身份执行之前以 root 身份执行操作?
我的情况是,Chef 可能会启动一项服务 (postgres),但随后可能会在带外停止。我想要一个后续的 Chef 运行来导致服务运行。我试过这个:
service "postgresql" do
action :start
end
Run Code Online (Sandbox Code Playgroud)
但它没有效果,(up to date)大概是因为 Chef 知道它已经启动并且无法判断它已经停止。(可能是由于service ... status此服务的行为方式?)如果我这样写:
# anti-pattern warning!
execute "force-start-postgresql" do
command "service postgresql start || /etc/init.d/postgresql start"
action :run
end
Run Code Online (Sandbox Code Playgroud)
我得到了想要的行为。也action :restart让它运行。然而,由于可移植性,这些看起来像是反模式(并且在后一种情况下可能会在再次启动之前停止它)。
那么,我如何告诉 Chef 强制启动该服务,即使它认为它已经在运行呢?
这是使用由 OpsCode 托管的 Chef 11.6 和默认的 postgresql 配方。(注意这很相似,但我认为与如何在 Chef 中强制对“最新”资源执行操作不完全相同?。)
---编辑(在 jtimberland 帖子后澄清)---
在-l debug这里显示:
DEBUG: service[postgresql] supports status, running
DEBUG: service[postgresql] is running
Run Code Online (Sandbox Code Playgroud)
即使它没有运行。所以这听起来像是一个错误,我对此很感兴趣。但是,我主要对是否有办法告诉厨师“始终调用服务启动命令,跳过状态检查”感兴趣。这就是这里的问题。
(我不是专家,但我认为确保服务运行的最便携方法是启动服务,这几乎总是幂等的。OTOH检查 …
我无法从我的 ubuntu 服务器重新启动我的 mysql 服务。这是错误:
? mysql.service - LSB: Start and stop the mysql database server daemon
Loaded: loaded (/etc/init.d/mysql; bad; vendor preset: enabled)
Active: failed (Result: exit-code) since mer. 2016-06-08 17:31:06 CEST; 54s ago
Docs: man:systemd-sysv-generator(8) Process: 4087 ExecStart=/etc/init.d/mysql start (code=exited, status=1/FAILURE)
juin 08 17:31:06 SRV-OVH-GIC03-V /etc/init.d/mysql[4569]: 0 processes alive and '/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf ping' resulted in
juin 08 17:31:06 SRV-OVH-GIC03-V /etc/init.d/mysql[4569]: [61B blob data]
juin 08 17:31:06 SRV-OVH-GIC03-V /etc/init.d/mysql[4569]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' …Run Code Online (Sandbox Code Playgroud) 是否可以创建一个依赖于其他几个服务的服务?什么是正确的语法?
如:
[Unit]
Description=service description
Wants=network.target
After=network.target
After=syslog.target
[Service]
User=bootapp
ExecStart=/var/app/app.jar
SuccessExitStatus=143
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
目标是在操作系统重新启动后自动启动服务,并确保在服务之前启动日志记录和网络服务。
附加问题:我需要指定Restart吗?