我可以成功启动/停止创建 tmux 会话的服务。服务如下:
test1.service:
[Unit]
Description=First test service
[Service]
Type=forking
User=lancer
ExecStart=/usr/bin/tmux new-session -s test1 -d
ExecStop=/usr/bin/tmux kill-session -t test1
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
$ sudo systemctl start test1.service
和
$ sudo systemctl stop test1.service
都成功了。现在我想要另一个 tmux 会话,我可以从另一个服务控制它。所以我创建了这个 test2.service:
[Unit]
Description=Second test service
[Service]
Type=forking
User=lancer
ExecStart=/usr/bin/tmux new-session -s test2 -d
ExecStop=/usr/bin/tmux kill-session -t test2
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
问题:两者中的任何一个都可以单独工作。我可以通过以下方式查看相应的 tmux 会话:
$ tmux ls
如果我启动其他服务,则不会发生任何情况。我只有之前的 tmux 会话。有人可以帮忙吗?
croncrontab就作业错误向所有者发送电子邮件。
systemd当它运行计时器时我怎样才能做同样的事情?
注意:我并不是在寻找向特定服务添加电子邮件通知的方法。或多项服务。理想情况下,我不想编程。我只是想知道systemd当任何计时器或服务失败时如何告诉 root 发送电子邮件。我不敢相信systemd没有实现由配置文件中的选项启用的这种基本通知。
然而,在事实上systemd缺乏这样一个基本功能的可悲情况下,我可以使用一些外部包,它的工作方式与logcheck系统日志的工作方式类似。
最近,我按照这个wiki从initscript切换到systemd,并且在启动过程中出现了这样的错误:
Job dev-md126p5.device/start timed out
Run Code Online (Sandbox Code Playgroud)
这是我的 fstab:
/dev/mapper/VGLinux-lvroot / ext4 rw,relatime,stripe=64,data=ordered 0 1
/dev/mapper/VGLinux-lvhome /home ext4 rw,relatime,stripe=64,data=ordered 0 2
/swapfile none swap defaults 0 0
/dev/md126p5 /media/data ntfs-3g uid=xiaoxing,gid=users 0 0
Run Code Online (Sandbox Code Playgroud)
这是我的分区方案:我有两个相同的硬盘驱动器,默认情况下,它是一个 raid0。三个分区是这样的:
“超时”后,它让我进入紧急模式,我可以手动挂载数据分区,并运行“systemctl default”,它会正常启动系统。或者我可以注释掉fstab文件中的“数据”部分,然后进入系统并轻松挂载。
在我切换到systemd之前没有问题。现在我已经尝试了一切,包括编写我自己的 .service 文件来挂载它,但它仍然无法在启动过程中挂载分区。有任何想法吗?
上面的错误来自journalctl,启动时打印在屏幕上的错误是:
[ TIME ] Timed out waiting for device dev-md126p5.device.
Run Code Online (Sandbox Code Playgroud)
然后是很多[DEPEND],然后我就进入了紧急模式。
我只是好奇是什么原因?是因为它在突袭中,还是因为它是一个 ntfs 分区?
因此,长话短说,我试图让 systemd 与 Arch 安装一起工作,但没有从 init 运行 systemd。这意味着我正在启动一个没有运行 systemd 的系统,然后尝试在其上启动 systemd。
我面临的问题与 cgroups 有关 - 在启动期间,systemd 抱怨缺少 /sys/fs/cgroup/systemd 作为 cgroup,因此运行时功能减少,因为它认为 cgroups 不可用。这会导致任何使用 D-Bus 与 systemd 通信的工具出现问题。
正常运行 systemd(作为 PID 1 运行)cgroups 被正确创建并且 systemd 可以完全工作。但是,当它在已经启动的系统上运行时,不会创建 cgroup。我想知道在 init 过程中的哪个点是 /sys/fs/cgroup/systemd 创建/挂载,以及如何在已经运行的系统上复制它?我可以确认不是 /sbin/init 创建了 cgroup,因为运行它会产生相同的结果。
否则,我应该从哪里开始查看 systemd 的源代码?或者也许有一个邮件列表,我可以直接从开发人员那里得到更好的答案?
我正在尝试从 Fedora 19 上的 systemd 运行一个小的交互式配置脚本。它必须以 root 身份运行,并在用户登录之前运行。我创建了一个看起来像这样的服务:
[Unit]
Description=blah
Before=graphical.target
[Service]
Type=oneshot
ExecStart=/path/to/script.sh
[Install]
RequiredBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
为简单起见,脚本如下所示:
#!/bin/sh
whiptail --msgbox "test" 0 78
Run Code Online (Sandbox Code Playgroud)
但是,当我加载此服务并重新启动时,不会显示脚本输出,并且在 /var/log/messages 中它建议应该设置 TERM 变量。但我希望脚本能在第一个虚拟终端上运行。
任何建议或见解将不胜感激。
我已经编写了一个 systemd 服务来在我的 Raspberry Pi 上启动地面控制。
[Unit]
Description=Groundcontrol status monitor
[Service]
ExecStart=/opt/groundcontrol/groundcontrol/start.sh
Type=forking
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
我正在使用该脚本,因为除非从 bin 目录启动,否则地面控制将无法正常工作。这是脚本:
cd /opt/groundcontrol/groundcontrol
./groundcontrol &
Run Code Online (Sandbox Code Playgroud)
当我手动启动它时,这非常有效,但是当我启动我的 Pi 并运行systemctl它时,它说它失败了。systemctl status groundcontrol.service印刷
groundcontrol.service - Groundcontrol status monitor
Loaded: loaded (/etc/systemd/system/groundcontrol.service; enabled)
Active: failed (Result: exit-code) since Wed 1969-12-31 17:00:14 MST; 43 years 11 months ago
Process: 111 ExecStart=/opt/groundcontrol/groundcontrol/start.sh (code=exited, status=0/SUCCESS)
Main PID: 116 (code=exited, status=2)
Dec 31 17:00:11 waldo systemd[1]: Starting Groundcontrol status monitor...
Dec 31 17:00:12 waldo systemd[1]: Started Groundcontrol …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 arch linux 设置互联网。我刚刚使用并行安装它并收到以下错误:
[root@singularity ~]# systemctl enable dhcpd.service
Failed to issue method call: No such file or directory
Run Code Online (Sandbox Code Playgroud)
所以我尝试手动链接它:
[root@singularity ~]# ln -s /usr/lib/systemd/system/dhcpd.service /usr/lib/systemd/system/multi-user.target.wants/dhcpd.service
Run Code Online (Sandbox Code Playgroud)
就在那时,我意识到该文件甚至不存在:
[root@singularity ~]# ls /usr/lib/systemd/system/dhcpd.service
ls: cannot access /usr/lib/systemd/system/dhcpd.service: No such file or directory
Run Code Online (Sandbox Code Playgroud)
有什么办法可以解决这个问题吗?我无法访问互联网,因为我无法启用 dhcpd。我正在运行 OSX 10.9 并使用并行。
我正在为 CentOS 7 下的 minidlnad(DLNA 服务器)编写 systemd 的 .service 文件。由于我的媒体文件集合托管在 RAID 阵列上,因此我需要在启动 minidlnad 服务器之前安装该阵列。RAID 阵列和 minidlnad 都应该在引导时启动。有没有办法在 systemd 中做到这一点?
对于某些服务单元文件,单元文件名与守护程序的名称不对应。
例如 Postfix:单元文件被调用,postfix.service但启动的底层守护进程被命名为master(主守护进程)和qmgr和tlsmgr(辅助守护进程)。
我正在寻找一种根据任何守护程序名称获取单元名称的方法。
使用systemctl status postfix(作为示例),我可以看到它显示了它产生的进程。
使用systemctl --all statusI 可以得到所有东西......但只是简单的 grep 进入那个烂摊子是不会得到单位名称的。
不幸的是,在我的 Debian 8 中,jessie systemctl 根本不起作用。
每个systemctl命令都会导致:
Failed to get D-Bus connection: Unknown error -1
系统状态 udev
无法获得 D-Bus 连接:未知错误 -1
我该如何解决?
我会很感激你的帮助。