标签: systemd-unit

使用 .timer 单元重新启动 systemd .service

我有以下执行脚本的 systemd myscript.service 单元:

[Unit]
Description=MyScript
Wants=time-sync.target

[Service]
Type=oneshot
RemainAfterExit=true
ExecStart=/usr/local/bin/test.sh -a
ExecStop=/usr/local/bin/test.sh -b

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

我想使用以下 Systemd myscript.timer 单元每分钟重新启动它:

[Unit]
Description=Schedule script execution

[Timer]
OnCalendar=*:0/1

[Install]
WantedBy=timers.target
Run Code Online (Sandbox Code Playgroud)

它只在第一次起作用,之后,状态保持为n/a:

# systemctl list-timers
NEXT                         LEFT        LAST                         PASSED      UNIT                         ACTIVATES
n/a                          n/a         Tue 2019-10-15 14:50:01 EDT  3ms ago     myscript.timer               myscript.service
Run Code Online (Sandbox Code Playgroud)

systemd services systemd-timer systemd-unit

4
推荐指数
1
解决办法
5458
查看次数

为什么 `/usr/lib/systemd/system/` 中的 systemd 单元文件仍然适用于 Ubuntu?

我知道systemd将单元文件存储在不同版本的 Linux 的不同位置。在 RHEL 上,它位于/usr/lib/systemd/system/,而在基于 Debian 的机器上,它位于/lib/systemd/system/.

然而,我的Ubuntu 18.04的机器上,我刚刚安装Elasticsearch使用.deb的文件,它的systemd单元文件下安装的/usr/lib/systemd/system/,但systemd仍然能够把它捡起来。

$ uname -a
Linux nucleolus 4.15.0-46-generic #49-Ubuntu SMP Wed Feb 6 09:33:07 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux

$ sudo systemctl status elasticsearch.service
? elasticsearch.service - Elasticsearch
   Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: http://www.elastic.co
Run Code Online (Sandbox Code Playgroud)

注意路径是/usr/lib/systemd/system/elasticsearch.service.

那么为什么systemd单元文件 at/usr/lib/systemd/system/仍然适用于 Ubuntu?Debian/Ubuntu 系统的真实单元文件加载路径是什么?

ubuntu debian systemd elasticsearch systemd-unit

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

在 Systemd 上使用 ExecStartPre 创建操作系统环境变量

我有以下单元文件:

[Unit]
Description=Panel for Systemd Services
After=network.target

[Service]
User=pysd
Group=pysd
PermissionsStartOnly=true
WorkingDirectory=/opt/pysd
ExecStartPre=/bin/mkdir /run/pysd
ExecStartPre=/bin/chown -R pysd:pysd /run/pysd
ExecStart=/usr/local/bin/gunicorn app:app -b 127.0.0.1:8100 --pid /run/pysd/pysd.pid --workers=2
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID
ExecStopPost=/bin/rm -rf /run/pysd
PIDFile=/run/pysd/pysd.pid
PrivateTmp=true

[Install]
WantedBy=multi-user.target
Alias=pysd.service
Run Code Online (Sandbox Code Playgroud)

我想创建一个环境变量,ExecStartPre然后将此变量合并到ExecStart.

更具体地说,我想GUNICORN_SERVER在运行 之前创建一个环境变量,ExecStart然后将此环境变量用于选项-bat ExecStart

我尝试了类似的东西ExecStartPre=/bin/bash -c 'export GUNICORN_SERVER=127.0.0.1:8100',但没有创建环境变量。

我如何实现这个场景?

bash environment-variables systemd systemd-unit

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

在 systemd 单元中使用动态日期

我尝试使用日期输出作为 systemd 单元中日志文件名的一部分。这里的例子:

[Unit]
Description=TCS minetest server unit

[Service]
Type=simple
ExecStart=/home/tcs/minetest/bin/minetestserver --worldname world --logfile /home/tcs/logs/debug_$$(date +%%Y_%%m_%%d).txt
ExecReload=/bin/kill -HUP $MAINPID
User=tcs

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

但我得到日志文件:

ls /home/tcs/logs/
'debug_$(date'
Run Code Online (Sandbox Code Playgroud)

如何使用当前日期作为日志文件名?

date systemd services systemd-unit

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

为什么 Debian 中没有设备单元文件?

我一直在阅读 systemd 并对设备单元文件进行了一些探索。

根据手册页:

systemd将为所有标有“systemd”udev标签的内核设备动态创建设备单元(默认情况下所有块和网络设备,以及其他一些)。这可用于定义设备和其他单元之间的依赖关系。要标记udev设备udev,请在规则文件中使用“TAG+="systemd"” ,请参阅udev(7)有关详细信息。

我曾尝试查看 /lib/systemd/system,如 Debian Wiki 中所述:

Debian 提供的单元文件位于 /lib/systemd/system 目录中。

但这些都无处可寻。

然而

~$ sudo systemctl list-units --type=device
Run Code Online (Sandbox Code Playgroud)

是否显示设备单元(如磁盘、声卡、以太网控制器等...)

我想知道在 Debian 中哪里可以找到设备单元文件?或者如果这些不存在,那么为什么不存在,systemd 如何在 Debian 中处理这些单元?

任何澄清/评论/见解将不胜感激。

谢谢MK。拉哈尔

debian systemd systemd-unit

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

Systemd - 反转单元文件中的条件?

我正在尝试创建一个 systemd 服务,该服务仅在文件系统上存在某个文件时才启动。

如果我使用ConditionPathExists这将使服务仅在有问题的文件存在时启动,这与我想要的行为相反。

有没有办法反转这些条件?

systemd systemd-unit

2
推荐指数
1
解决办法
1911
查看次数

如何设置用户自动启动并正确配置 systemd 用户服务?

在我的 Arch 服务器上,我设置的用户仅限于他们的主目录。我跑了:

useradd -m -s /bin/bash usernamepasswd username

我读过这篇维基文章...

我想我应该使用 systemd 用户服务让每个用户在启动时运行一个节点服务器。所以我登录了一个用户帐户su username并创建了一个~/.config/systemd/user/serve.service包含以下内容的文件:

[Unit]
Description=One of the servers

[Service]
ExecStart=/usr/bin/node /home/username/server.js

[Install]
WantedBy=default.target
Run Code Online (Sandbox Code Playgroud)

然后我跑systemctl --user enable serve.service了响应Failed to connect to bus: Permission denied

据我所知,我应该systemctl --user ...以用户身份而不是 root 身份运行命令。

那么我在这个配置中错过了什么?

users arch-linux systemd systemd-unit

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

如何在systemd单元条件下检查多个主机名

我正在尝试使 systemd 服务基于多个主机名模式有条件启动。

我尝试过这个但没有运气:

root@linkbox-BI034415:/# systemctl cat mcbapp
# /lib/systemd/system/myservice.service
[Unit]
Description=My Service
Wants=another.service
After=another.service
ConditionHost=HostOne*|HostTwo*
Also tried
ConditionHost={HostOne*,HostTwo*}


[Service]
EnvironmentFile=/etc/default/myenv
ExecStart=/opt/bin/my-apps
Restart=on-failure

[Install]
WantedBy=multi-user.target

Run Code Online (Sandbox Code Playgroud)

有什么建议吗?

systemd systemd-unit

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