Мне нужно, чтобы он работал каждые, скажем, 14 дней. И в определенный час (скажем, в 4 утра). Возможно ли это с systemd?
Самый простой способ получить приблизительно каждые 14 дней - это делать это два раза в месяц.
[Install]
WantedBy=default.target
[Unit]
Description=Every fortnight.
[Timer]
OnCalendar=*-*-1,15 4:00:00
Unit=whatever.service
Этот синтаксис объясняется в man systemd.timer
; *-*-1,15
- это 1-е и 15-е число каждого месяца каждого года.
Если вы хотели попробовать каждые четырнадцать дней с момента начала обслуживания точно :
[Timer]
OnActiveSec=14d
, то здесь есть подвох: Я думаю, что система должна была бы работать все время. Есть Persistent
возможность "хранить на диске время, когда сервисный модуль был последний раз запущен...", но в соответствии со страницей руководства "эта настройка действует только на таймеры, сконфигурированные с OnCalendar".
Я просто добавлю к остальным ответам, что если вы хотите протестировать для конкретной строки, вы можете использовать следующую:
эхо $BASH
echo $KSH_VERSION
Эти переменные будут установлены соответствующей оболочкой, которую вы запускаете.
$$
- это текущий процесс.
PS -P $$
Следовательно, показывает ваш текущий процесс - который в этом случае находится ваша оболочка.
Вы также можете ECHO $ Shell
.
ИЛИ
getent passwd | grep ^`whoami`: | awk -F: '{print $NF}'
Чтобы получить вашу оболочку по умолчанию, вы можете просто распечатать $ Shell
переменную :
$ echo $SHELL
/bin/bash
, пока это , не определяется POSIX , он доступен на всех снарядах, которые я проверен (ясень, Bash, Dash, Fish, CSH, KSH, TCSH и ZSH).
Если эта команда не работает над вашей средой, вы всегда можете смотреть / etc / passwd
. Например, на системе Linux (вероятно, Unix также, но я не знаю), оболочка пользователя foo
задается командой:
grep '^foo:' /etc/passwd | cut -d: -f7
, чтобы получить оболочку, которую вы в данный момент работаете , вы могли бы использовать:
ps -p $$ | tail -n1 | awk '{print $NF}'