首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >系统用户定时器不重复

系统用户定时器不重复
EN

Unix & Linux用户
提问于 2020-06-06 16:25:13
回答 1查看 702关注 0票数 3

我试图以用户的身份每分钟运行一个systemd计时器,但在初始触发器之后不会重复。ffmpeg-timelapse.timer被配置为每分钟触发一次OnCalendar=minutely,而ffmpeg-timelapse.target是依赖服务的WantedBy。这使我可以轻松地添加/删除相机的时间流逝配置。

我遇到的问题是,当我启动ffmpeg-timelapse.timer单元时,它将安排在下一分钟,但不会重复。如果我用--now参数启动它,也会发生同样的问题。

ffmpeg-timelapse.timer

代码语言:javascript
复制
[Unit]
Description=Runs ffmpeg timelapse units every minute

[Timer]
OnCalendar=minutely
Unit=ffmpeg-timelapse.target

[Install]
WantedBy=timers.target

ffmpeg-timelapse.target

代码语言:javascript
复制
[Unit]
Description=Triggers the individual timelapse units for each camera.
StopWhenUnneeded=yes

照相机服务文件的示例。

ffmpeg-timelapse01-front-yard.service

代码语言:javascript
复制
[Unit]
Description=Front Yard Timelapse Unit
Wants=ffmpeg-timelapse.timer

[Service]
ExecStart=/bin/bash -ac '. camera01.conf ; exec ffmpeg-timelapse.sh'

[Install]
WantedBy=ffmpeg-timelapse.target

启用和启动服务会将其安排在下一分钟。

代码语言:javascript
复制
$ systemctl --user start ffmpeg-timelapse.timer 
$ systemctl --user list-timers 
NEXT                         LEFT     LAST PASSED UNIT                   ACTIVATES
Sat 2020-06-06 12:08:00 EDT  12s left n/a  n/a    ffmpeg-timelapse.timer ffmpeg-timelapse.target

1 timers listed.
Pass --all to see loaded but inactive timers, too.

然而,一旦它运行,它就不会第二次发射。

代码语言:javascript
复制
$ systemctl --user list-timers 
NEXT LEFT LAST                         PASSED      UNIT                   ACTIVATES
n/a  n/a  Sat 2020-06-06 12:08:42 EDT  1min 2s ago ffmpeg-timelapse.timer ffmpeg-timelapse.target

1 timers listed.
Pass --all to see loaded but inactive timers, too.

我正在运行的用户已经启用了linger

代码语言:javascript
复制
$ loginctl show-user timelapse
UID=1000
GID=1000
Name=timelapse
Timestamp=Tue 2020-04-07 16:16:20 EDT
TimestampMonotonic=3291000946930
RuntimePath=/run/user/1000
Service=user@1000.service
Slice=user-1000.slice
Display=411982
State=active
Sessions=412092 411982 163185
IdleHint=no
IdleSinceHint=0
IdleSinceHintMonotonic=0
Linger=yes

在我看来,状态输出是正确的。

代码语言:javascript
复制
$ systemctl --user status ffmpeg-timelapse.target 
● ffmpeg-timelapse.target - Triggers the individual timelapse units for each camera.
   Loaded: loaded (/home/timelapse/.config/systemd/user/ffmpeg-timelapse.target; static; vendor preset: enabled)
   Active: active since Sat 2020-06-06 10:50:42 EDT; 1h 23min ago

$ systemctl --user status ffmpeg-timelapse.timer 
● ffmpeg-timelapse.timer - Runs ffmpeg timelapse units every 5 minutes
   Loaded: loaded (/home/timelapse/.config/systemd/user/ffmpeg-timelapse.timer; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2020-06-06 12:13:25 EDT; 1min 1s ago

$ systemctl --user status ffmpeg-timelapse01-front-yard.service 
● ffmpeg-timelapse01-front-yard.service - Front Yard Timelapse Unit
   Loaded: loaded (/home/timelapse/.config/systemd/user/ffmpeg-timelapse01-front-yard.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sat 2020-06-06 12:14:03 EDT; 35s ago
  Process: 4491 ExecStart=/bin/bash -ac '. camera01.conf ; exec ffmpeg-timelapse.sh'
 Main PID: 4491 (code=exited, status=0/SUCCESS)

下面是journalctl -xe的输出

代码语言:javascript
复制
Jun 06 12:13:25 srv01 systemd[26482]: Started Runs ffmpeg timelapse units every minute.
-- Subject: Unit UNIT has finished start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
-- 
-- Unit UNIT has finished starting up.
-- 
-- The start-up result is done.
Jun 06 12:14:02 srv01 systemd[26482]: Started Front Yard Timelapse Unit.
-- Subject: Unit UNIT has finished start-up
-- Defined-By: systemd
-- Support: https://www.debian.org/support
-- 
-- Unit UNIT has finished starting up.
-- 
-- The start-up result is done.
EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-06-06 17:05:15

我通过查看systemctl --user list-units --all ffmpeg*输出来确定这个问题。ffmpeg-timelapse.target仍在加载/活动/活动。在实际触发事件之前,ffmpeg-timelapse.timerSUB设置为waiting

代码语言:javascript
复制
UNIT                                LOAD   ACTIVE     SUB     JOB   DESCRIPTION                                             
ffmpeg-timelapse.target             loaded active     active  start Triggers the individual timelapse units for each camera.
ffmpeg-timelapse.timer              loaded active     running       Runs ffmpeg timelapse units every minute                

错误在于ffmpeg-timelapse.targetD7配置。我需要向其添加oneshot配置,否则目标单元将保持活动状态。

代码语言:javascript
复制
$ cat ffmpeg-timelapse.target
[Unit]
Type=oneshot
Description=Triggers the individual timelapse units for each camera.
StopWhenUnneeded=yes

现在它正在按预期的每一分钟重复。

代码语言:javascript
复制
$ systemctl --user list-timers 
NEXT                         LEFT     LAST                         PASSED UNIT                   ACTIVATES
Sat 2020-06-06 12:58:00 EDT  13s left Sat 2020-06-06 12:57:42 EDT  3s ago ffmpeg-timelapse.timer ffmpeg-timelapse.target

这就是部队现在的样子。

代码语言:javascript
复制
UNIT                                  LOAD   ACTIVE   SUB     DESCRIPTION                                             
ffmpeg-timelapse01-front-yard.service loaded inactive dead    Front Yard Timelapse Unit                               
ffmpeg-timelapse.target               loaded inactive dead    Triggers the individual timelapse units for each camera.
ffmpeg-timelapse.timer                loaded active   waiting Runs ffmpeg timelapse units every minute       

每个状态输出。

代码语言:javascript
复制
$ systemctl --user status ffmpeg-timelapse.timer
● ffmpeg-timelapse.timer - Runs ffmpeg timelapse units every minute
   Loaded: loaded (/home/timelapse/.config/systemd/user/ffmpeg-timelapse.timer; enabled; vendor preset: enabled)
   Active: active (waiting) since Sat 2020-06-06 12:59:30 EDT; 3min 43s ago

$ systemctl --user status ffmpeg-timelapse.target 
● ffmpeg-timelapse.target - Triggers the individual timelapse units for each camera.
   Loaded: loaded (/home/timelapse/.config/systemd/user/ffmpeg-timelapse.target; static; vendor preset: enabled)
   Active: inactive (dead) since Sat 2020-06-06 13:03:11 EDT; 6s ago

$ systemctl --user status ffmpeg-timelapse01-front-yard.service 
● ffmpeg-timelapse01-front-yard.service - Front Yard Timelapse Unit
   Loaded: loaded (/home/timelapse/.config/systemd/user/ffmpeg-timelapse01-front-yard.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sat 2020-06-06 13:03:12 EDT; 8s ago
  Process: 9607 ExecStart=/bin/bash -ac '. camera01.conf ; exec ffmpeg-timelapse.sh'
 Main PID: 9607 (code=exited, status=0/SUCCESS)
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/591278

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档