Я надеялся запускать команду каждые 85 дней, используя systemd. Я создал таймер и службу для команды, но не могу запустить таймер. Я надеюсь, что команда будет запускаться каждые 85, а не при загрузке и запускаться, даже если сервер перезагружается в течение 85-дневного периода.
/etc/systemd/system/my.service
[Unit]
description=Do my task
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/myTask
/etc/systemd/system/my.timer
[Unit]
Description=Timer to do my task
[Timer]
OnUnitActiveSec=85d
Unit=my.service
Persistent=true
После попыток запустить его с помощью systemctl start my.timer
, я получаю следующие сообщения об ошибках:
my.timer: Refusing to start, unit to trigger not loaded.
Failed to start Timer to do my task.
Проблема заключалась в том, что сценарий, который я пытался запустить, изначально не работал нормально.
Я диагностировал это по:
# systemctl status my.timer
● my.timer - Timer to update stuff
Loaded: loaded (/etc/systemd/system/my.timer; enabled; vendor preset: enabled)
Active: active (elapsed) since Tue 2020-01-28 07:14:54 UTC; 2 weeks 6 days ago
Trigger: n/a
Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.
# systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
...
n/a n/a Tue 2018-03-20 14:13:46 UTC 1 years 10 months ago my.timer my.service
# systemctl status my.service
● my.service - Renew Lets Encrypt certificates
Loaded: loaded (/etc/systemd/system/my.service; static; vendor preset: enabled)
Active: failed (Result: exit-code) since Mon 2020-02-17 15:53:18 UTC; 20s ago
Process: 19875 ExecStart=/usr/local/sbin/script (code=exited, status=203/EXEC)
Main PID: 19875 (code=exited, status=203/EXEC)
Feb 17 15:53:18 server systemd[1]: Starting Update stuff...
Feb 17 15:53:18 server systemd[19875]: my.service: Failed to execute command: Exec format error
Feb 17 15:53:18 server systemd[19875]: my.service: Failed at step EXEC spawning /usr/local/sbin/script: Exec format error
Feb 17 15:53:18 server systemd[1]: my.service: Main process exited, code=exited, status=203/EXEC
Feb 17 15:53:18 server systemd[1]: my.service: Failed with result 'exit-code'.
Feb 17 15:53:18 server systemd[1]: Failed to start Update stuff.
# vim /usr/local/sbin/script
#!/bin/bash
echo Update!
# systemctl start my.service
# systemctl status letsencrypt.service
● my.service - Update stuff
Loaded: loaded (/etc/systemd/system/my.service; static; vendor preset: enabled)
Active: inactive (dead) since Mon 2020-02-17 16:05:45 UTC; 4s ago
Process: 31781 ExecStart=/usr/local/sbin/script (code=exited, status=0/SUCCESS)
Main PID: 31781 (code=exited, status=0/SUCCESS)
Feb 17 16:05:45 server systemd[1]: Starting Update stuff...
Feb 17 16:05:45 server test[31781]: Update!
Feb 17 16:05:45 server systemd[1]: Started Update stuff.
(уууу)
# systemctl list-timers
NEXT LEFT LAST PASSED UNIT ACTIVATES
...
Tue 2020-05-12 16:05:45 UTC 2 months 24 days left Tue 2018-03-20 14:13:46 UTC 1 years 10 months ago my.timer my.service
x timers listed.
Pass --all to see loaded but inactive timers, too.
(теперь таймер показывает, что он снова запустится)
+ Изменить description
в вашем служебном файле Description
. В противном случае в журналах будут отображаться ошибки, как показано ниже:
Неизвестное lvalue 'description' в разделе 'Unit'
Также попробуйте использовать эти команды для устранения проблем с файлом таймера:
systemctl status my.timer
journalctl -xe
Обновите свой пост, если вы видите какие-либо ошибки в журналах и не знаете, как их исправить.