如何使用 systemctl 找出哪些命令适用于服务?
# systemctl reload nagios.service
failed to reload nagios.service: Job type reload is not applicable for unit nagios.service.
Run Code Online (Sandbox Code Playgroud)
使用 init.d,您可以在没有命令的情况下运行脚本并查看适用命令的使用信息:
# /etc/init.d/nagios
Usage: /etc/init.d/nagios {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}
Run Code Online (Sandbox Code Playgroud) 我开始使用 Amazon Linux AMI。它似乎有/etc/systemd/system/文件夹,但我无法使用systemctl来启动停止我添加到/etc/systemd/system/文件夹中的服务。
$ systemctl
bash: systemctl: command not found
Run Code Online (Sandbox Code Playgroud) 我创建了一个自定义服务文件,如下所示:
[Unit]
Description=aaa main application
After=syslog.target network-online.target
[Service]
Type=forking
PIDFile=/usr/local/aaa_path/aaa/aaa.pid
WorkingDirectory=/usr/local/aaa_path/aaa/
ExecStart=/usr/local/aaa_path/aaa/run_aaa.sh
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
检查状态时:
systemctl status aaa
Run Code Online (Sandbox Code Playgroud)
一切看起来都不错,除了:
... systemd[1]: aaa.service: Supervising process 18285 which is not our child. We'll most likely not notice when it exits.
Run Code Online (Sandbox Code Playgroud)
想知道为什么会显示此消息以及是否需要关注?
我的 ExecStart 是一个名为 run_aaa.sh 的 bash 脚本;它所做的是准备一些环境变量,运行一些必需的维护脚本,最后在后台运行带有一些动态命令行选项的 aaa 二进制文件(作为守护进程) - 然后退出(run_aaa.sh 脚本退出,aaa 守护进程) binary 在后台继续运行,并维护自己的 pid 文件,systemd 知道)
我知道 systemd 正在运行 run_aaa.sh 并期望它分叉(因为我指定了 type=forking)并且它实际上通过在后台运行“aaa”二进制守护程序并随后退出来“分叉”。另外,我确实指定了 PIDFile 路径,并且我的 aaa 二进制文件按原样维护了这个 PIDFile,那么为什么 systemd 会抱怨它可能无法监督我的守护进程?
有没有更好的方法来为这个用例配置服务?(我必须使用 run_aaa.sh 脚本来执行我的二进制文件)
我正在尝试使用类似问题的答案来设置用户级服务。我已经创建了所需的文件并重新启动。
我正在取得进展,因为我现在收到“无法获得 D 总线连接:权限被拒绝”,而“无法获得 D 总线连接:连接被拒绝”,但我很困惑,因为我不知道是什么对象它正在尝试访问(文件?套接字?),因此甚至无法检查当前权限。有任何想法吗?
到目前为止,我已经添加了:
loginctl enable-linger userservice
Run Code Online (Sandbox Code Playgroud)
[Unit]
Description=D-Bus User Message Bus
Requires=dbus.socket
[Service]
ExecStart=/usr/bin/dbus-daemon --session --address=systemd: --nofork --nopidfile --systemd-activation
ExecReload=/usr/bin/dbus-send --print-reply --session --type=method_call --dest=org.freedesktop.DBus / org.freedesktop.DBus.ReloadConfig
[Install]
Also=dbus.socket
Run Code Online (Sandbox Code Playgroud)
[Unit]
Description=D-Bus User Message Bus Socket
[Socket]
ListenStream=%t/bus
ExecStartPost=-/bin/systemctl --user set-environment DBUS_SESSION_BUS_ADDRESS=unix:path=%t/bus
[Install]
WantedBy=sockets.target
Also=dbus.service
Run Code Online (Sandbox Code Playgroud)
[Unit]
Description=Test user-level service
[Service]
Type=dbus
BusName=com.wtf.service
ExecStart=/home/userservice/userservice.py
Restart=on-failure
[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)
没有在别处添加任何链接...
让它失败:
systemctl --user status
Run Code Online (Sandbox Code Playgroud)
编辑 2018-10-25:
添加export XDG_RUNTIME_DIR=/run/user/$(id -u) …
在遵循有关在 CentOS 上安装 tomcat 的教程时,我在执行该行时遇到了问题sudo systemctl enable tomcat- 它抱怨以下错误消息:
The unit files have no installation config (WantedBy, RequiredBy, Also, Alias
settings in the [Install] section, and DefaultInstance for template units).
This means they are not meant to be enabled using systemctl.
Run Code Online (Sandbox Code Playgroud)
但是,我的 [Install] 部分中显然有一个条目:
[Unit]
Description=Tomcat 9 servlet container
After=network.target
[Service]
Type=forking
User=tomcat
Group=tomcat
Environment="JAVA_HOME=/usr/lib/jvm/jre"
Environment="JAVA_OPTS=-Djava.security.egd=file:///dev/urandom"
Environment="CATALINA_BASE=/opt/tomcat/latest"
Environment="CATALINA_HOME=/opt/tomcat/latest"
Environment="CATALINA_PID=/opt/tomcat/latest/temp/tomcat.pid"
Environment="CATALINA_OPTS=-Xms256M -Xmx512M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/latest/bin/startup.sh
ExecStop=/opt/tomcat/latest/bin/shutdown.sh
[INSTALL]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得它以允许我启用此服务?我相信我已经完成了它所要求的一切。
有没有办法知道当前运行的配置已过时?有没有办法查看当前运行的配置并将其与文件进行比较?
在运行重新加载之前知道正在运行的配置是什么对于故障排除很有价值。如果命令会告诉我它是否真的更新了配置,这也很有价值。
我遇到了一个奇怪的问题。我有一个服务文件来启动自定义应用程序。systemctl 命令显示 LOAD 为未找到
\n\n\n\n\n未找到资源服务-prod-prod.service 活动运行资源-服务-prod-prod.service
\n
但是,文件显示在
\n\nls -lrt /etc/systemd/system\nlrwxrwxrwx 1 root root 96 Mar 5 2017 resource-service-prod.service -> /opt/app/daps-prod/resource-service/bin/resource-service-prod-prod.service\nRun Code Online (Sandbox Code Playgroud)\n\n服务状态显示为正在运行,但已加载:未找到(原因:没有此类文件或目录)
\n\nsudo service resource-service-prod status\nRedirecting to /bin/systemctl status resource-service-prod.service\n\xe2\x97\x8f resource-service-prod-prod.service\n Loaded: not-found (Reason: No such file or directory)\n Active: active (running) since Thu 2018-12-20 06:40:37 CST; 3 weeks 0 days ago\n Main PID: 12888 (node)\n CGroup: /system.slice/resource-service-prod-prod.service\n \xe2\x94\x9c\xe2\x94\x8012888 /usr/bin/node /opt/app/daps-prod/resource-service/source/app.js\n \xe2\x94\x9c\xe2\x94\x8012923 /usr/bin/node /opt/app/daps-prod/resource-service/source/app.js\n \xe2\x94\x9c\xe2\x94\x8012924 /usr/bin/node /opt/app/daps-prod/resource-service/source/app.js\n \xe2\x94\x9c\xe2\x94\x8012930 /usr/bin/node /opt/app/daps-prod/resource-service/source/app.js\n \xe2\x94\x9c\xe2\x94\x8012936 /usr/bin/node /opt/app/daps-prod/resource-service/source/app.js\n \xe2\x94\x9c\xe2\x94\x8012942 …Run Code Online (Sandbox Code Playgroud) 我刚刚在我的 ubuntu 19.10 中安装了 mariadb,sudo apt install mariadb-server mariadb-client之后我尝试通过sudo systemctl start mariadb.serviceshell get freeze启动服务器,我必须使用它Ctl+c来运行 shell。
在它显示的状态激活(开始)
~$ sudo systemctl status mariadb.service
mariadb.service - MariaDB 10.3.22 database server
Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/mariadb.service.d
??migrated-from-my.cnf-settings.conf
Active: activating (start) since Mon 2020-04-20 08:44:57 IST; 5min ago
Docs: man:mysqld(8)
https://mariadb.com/kb/en/library/systemd/
Process: 10705 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
Process: 10707 ExecStartPre=/bin/sh -c systemctl unset-environment …Run Code Online (Sandbox Code Playgroud) 我有一个安装和设置流量服务器的脚本:
yum install -y trafficserver
systemctl start trafficserver
traffic_line -s proxy.config.url_remap.remap_required -v 0
traffic_line -s proxy.config.reverse_proxy.enabled -v 0
Run Code Online (Sandbox Code Playgroud)
问题是,traffic_line失败了:
[connect] ERROR (main_socket_fd 3): No such file or directory 错误:无法连接到管理端口,确保traffic_manager正在运行
这是因为systemctl start立即返回,无需等待流量服务器实际启动。
有没有办法告诉systemctl start只有在服务启动后才返回?
如果这是不可能的,是否有我可以运行的命令systemctl start来实际等待服务启动?
安装 Modoboa(开源邮件托管)后,我尝试启动 clamav-daemon,但遇到启动失败的情况。
\n systemctl status clamav-daemon.service\n clamav-daemon.service - Clam AntiVirus userspace daemon\n Loaded: loaded (/lib/systemd/system/clamav-daemon.service; enabled; vendor preset: enabled)\n Drop-In: /etc/systemd/system/clamav-daemon.service.d\n \xe2\x94\x94\xe2\x94\x80extend.conf\n Active: inactive (dead)\nCondition: start condition failed at Fri 2021-01-15 04:19:06 EST; 33min ago\n \xe2\x94\x94\xe2\x94\x80 ConditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc} was not met\nRun Code Online (Sandbox Code Playgroud)\n下面显示了问题,conditionPathExistsGlob=/var/lib/clamav/daily.{c[vl]d,inc} 未满足。\n我无法使用 systemctl 或其他命令启动服务。\n经过一些故障排除后,我发现 /var/lib/clamav 是空的,应该有一些 .cvd 更新文件。\n而且我无法使用此命令更新 clamav(显示 403 错误):
\nsudo clamav-freshclam\nRun Code Online (Sandbox Code Playgroud)\n我现在能做什么?
\nsystemctl ×10
systemd ×7
linux ×4
bash ×2
centos7 ×2
amazon-linux ×1
anti-virus ×1
centos ×1
clamav ×1
database ×1
dbus ×1
email-server ×1
mariadb ×1
mysql ×1
tomcat ×1