我在 Raspbian Jessie 上使用 Systemd 设置了 node.js 应用程序形式的服务,它使用自己的用户帐户。但是,我发现该服务无法正常运行,因为它没有必要的权限。我安装的节点模块之一需要 root 访问权限。如果我使用 sudo 手动运行应用程序,一切正常。
有没有办法告诉 systemd 使用 sudo 运行服务?
我正在尝试使用journalctl的模式匹配SYSLOG_IDENTIFIERS。例如,我有大量消息标记为sshd:
$ journalctl -t sshd | wc -l
987
Run Code Online (Sandbox Code Playgroud)
但是如果我尝试使用模式匹配来找到它们:
$ journalctl -t 'ssh*'
-- No Entries --
$ journalctl -t 'ssh.*'
-- No Entries --
Run Code Online (Sandbox Code Playgroud)
journalctl 手册页说模式应该有效,但我找不到关于如何在 systemd 中使用/定义模式的任何其他信息。
$ man journalctl
....
-t, --identifier=SYSLOG_IDENTIFIER|PATTERN
Show messages for the specified syslog identifier SYSLOG_IDENTIFIER,
or for any of the messages with a "SYSLOG_IDENTIFIER" matched by PATTERN.
Run Code Online (Sandbox Code Playgroud)
我正在运行 ArchLinux:
$ journalctl --version
systemd 225
+PAM -AUDIT -SELINUX -IMA -APPARMOR +SMACK -SYSVINIT +UTMP +LIBCRYPTSETUP
+GCRYPT +GNUTLS …Run Code Online (Sandbox Code Playgroud) 我在无头 linux 机器上运行私人游戏服务器。因为我不是白痴,所以说服务器作为它自己的非特权用户运行,具有下载更新和修改世界数据库所需的最低访问权限。
我还创建了一个 systemd 单元文件,以便在需要时正确启动、停止和重新启动服务器(例如,对于上述更新)。
但是,为了实际调用systemctl或者service <game> start/stop/restart我仍然需要以 root 或有sudo能力的用户身份登录。
有没有办法告诉 systemd 对于该<game>服务,gamesrv允许非特权用户运行启动/停止/重启命令?
我在 Ubuntu 16.04 LTS 中运行用户级服务。例如,我的 test.service 位于~/.config/systemd/user/test.service.
我能够通过这样做来运行服务
systemctl --user start test.target
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试使用 读取其日志时journalctl,收到以下错误消息:
journalctl --user -u test.service
Hint: You are currently not seeing messages from other users and the system.
Users in the 'systemd-journal' group can see all messages. Pass -q to
turn off this notice.
No journal files were opened due to insufficient permissions.
Run Code Online (Sandbox Code Playgroud)
如何journalctl用于用户的特定单位?
如何在现代(基于 systemd 的)Linux 发行版上禁用除 ssh 之外的所有服务?
我需要实施维护模式。
所有这些服务都需要关闭:
但是 ssh 不能关闭,因为这会在维护模式下用于执行任务。
当然,我可以编写一个 shell 脚本,循环遍历我想禁用的服务列表。但这感觉就像我重新发明了一些已经存在但我现在还不知道的东西。
背景 :
我创建了一个名为myappwith的应用程序Spring-boot。它由一个可自我执行的 jar 组成,并与 systemd 服务兼容。现在,我正在尝试将它与 jenkins 集成。
我想要的是:
我希望詹金斯能够:
问题:
到目前为止,只有 sudoers 可以启动/停止服务。我不希望 jenkins 成为 sudoer(看起来很乱)。
当前结构:
我有一个用户myapp有一个/home/myapp文件夹。生成的 jar 被调用myapp并放置在/home/myapp. 用户myapp是生成的 jar 的所有者:
myapp@myserver:~/backend$ ll
total 53900
drwxrwxr-x 2 myapp myapp 4096 Apr 25 17:09 ./
drwxr-xr-x 6 myapp myapp 4096 Apr 25 17:08 ../
-rw-rw-r-- 1 myapp myapp 511 Apr 20 16:13 application.properties
-rwxr--r-- 1 myapp myapp 55175294 Apr 20 …Run Code Online (Sandbox Code Playgroud) 我们有一个简单的 systemd 脚本来以服务方式启动 MineCraft 服务器。SO 是 CentOS 7。这里的脚本:
[Unit]
Description=Minecraft Server
After=syslog.target network.target
[Service]
Type=simple
WorkingDirectory=/root/Minecraft
ExecStart=/bin/java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
Restart=on-failure
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
启动服务工作正常,但停止时,服务仍处于失败状态。看:
systemctl status minecraftd.service
minecraftd.service - Minecraft Server
Loaded: loaded (/usr/lib/systemd/system/minecraftd.service; disabled)
Active: active (running) since Mon 2015-06-01 16:00:12 UTC; 18s ago
Main PID: 20975 (java)
CGroup: /system.slice/minecraftd.service
??20975 /bin/java -Xmx1024M -Xms1024M -jar minecraft_server.jar nogui
systemctl stop minecraftd.service
systemctl status minecraftd.service
minecraftd.service - Minecraft Server
Loaded: loaded (/usr/lib/systemd/system/minecraftd.service; disabled)
Active: failed (Result: exit-code) since Mon …Run Code Online (Sandbox Code Playgroud) 我知道如何启用/禁用loginctl.
但是直到现在我还没有找到查询用户状态的方法。
我想知道:是否为用户启用了挥之不去的功能foo?
我怎样才能访问这些信息?
我想定义一个在启动时启动的简单服务,在 Ubuntu 服务器 16.10 上。所以我创建了一个/etc/init.d/mydaemon
我不知何故在 upstart 和 systemd 之间搞砸了:起初我以为我必须设置一个 upstart 服务。因此,在将我的文件转换为 upstart 语法后,我运行了update-rc.d mydaemon defaults.
我找出了我的错误并 run update-rc.d mydaemon remove,转换为 systemd 语法,然后 run systemctl enable mydaemon,但得到错误:
mydaemon.service is not a native service, redirecting to systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable mydaemon
update-rc.d: error: mydaemonDefault-Start contains no runlevels, aborting.
Run Code Online (Sandbox Code Playgroud) 我已将 systemd timesyncd 配置为从 NTP 服务器获取时间:
/etc/systemd/timesyncd.conf > NTP=ca.pool.ntp.org
systemctl restart systemd-timesyncd.service
timedatectl set-ntp true
Run Code Online (Sandbox Code Playgroud)
状态如下:
$ timedatectl status
...
Network time on: yes
NTP synchronized: no
Run Code Online (Sandbox Code Playgroud)
正如输出所暗示的那样,时间尚未同步。有人可以帮我解决以下问题吗?
systemd ×10
linux ×3
service ×2
systemctl ×2
arch-linux ×1
daemon ×1
jenkins ×1
journalctl ×1
journald ×1
maintenance ×1
ntp ×1
permissions ×1
ubuntu ×1
ubuntu-16.04 ×1