Su comando buscará en el directorio de nivel superior /var/log/mbackups
y también descenderá a cualquier subdirectorio, eliminando archivos que coincidan con el criterio de siete días. No eliminará los directorios en sí.
Si desea que un comando busque archivos solo en el directorio /var/log/mbackups
y no descienda a los subdirectorios , debe agregar esa restricción:
find /var/log/mbackups -maxdepth 1 -mtime +7 -type f -delete
En general, puede probar el comando find
reemplazando la acción -delete
con algo inocuo, como-print
:
find /var/log/mbackups -mtime +7 -type f -print
Я могу придумать несколько способов сделать это. Конечно, у каждого есть свои нюансы.
Вероятно, наиболее простым подходом было бы создание простого сервиса с выделенным tty, подобного этому:
# /etc/systemd/system/systemd-interactive-simple-tty.service
[Unit]
Description=Example systemd interactive simple tty service
After=getty.service
[Service]
# https://www.freedesktop.org/software/systemd/man/systemd.exec.html
ExecStart=/usr/local/sbin/systemd-interactive.bash
StandardInput=tty-force
TTYVHangup=yes
TTYPath=/dev/tty20
TTYReset=yes
# https://www.freedesktop.org/software/systemd/man/systemd.service.html
Type=simple
RemainAfterExit=false
Restart=always
RestartSec=5s
[Install]
WantedBy=default.target
Следующие параметры будут работать с указанным выше простым сервисом:
conspy получает (удаленное )управление виртуальной консолью в текстовом режиме. Это, вероятно, ваш лучший выбор (с вышеупомянутой службой tty ). Он доступен в большинстве расширенных репозиториев пакетов и прост в использовании, например:
conspy 20 # hit ESC+ESC+ESC (3 times quickly, to exit)
chvt работает аналогично conspy
, но делает /dev/ttyN приоритетным (локальным )терминалом. Он является частью коллекции kbd и устанавливается по умолчанию практически в каждом современном дистрибутиве Linux. Вот почему я подумал, что это стоит упомянуть. Основное предостережение с chvt
заключается в том, что вам нужно использовать подключенную клавиатуру, что, вероятно, не то, что вам нужно. Для приведенного выше примера службы chvt
можно использовать так:
chvt 20 # ALT+F1 to return to /dev/tty1
reptyr использует системный вызов ptrace(2)
для подключения к удаленной программе (через ее PID ). Это совершенно другой подход, чем conspy
и chvt
, но он также будет работать с приведенным выше определением службы.
Просто имейте в виду, что reptyr
сам по себе не поддерживает «отсоединение». Его поддержка termcap также не очень надежна. Как правило, reptyr
используется в сочетании с screen и/или tmux , поскольку они обеспечивают более плавный способ «отсоединения»; Я считаю reptyr
отличным нишевым инструментом для перемещения существующих PID в screen
сеанс или tmux
окно или панель.
Это сказал; Я поместил эту опцию здесь, хотя и последней, потому что по-прежнему можно использовать reptyr
без screen
или tmux
. Главное предостережение: если вы выйдете из процесса (, например ^C ),вместо повторного использования (снова )на другой tty/pty (через другую оболочку ). Отправка прерывания процессу может привести к его прерыванию, и я уверен, что вы знаете все остальное.
Возможно, это нормально, особенно если процесс не критичен и служба systemd настроена на Restart=always
, как я показал выше. Если процесс «сломается», тогда systemd автоматически перезапустит его (еще одна интересная функция systemd! ). Существуют разные значения для Restart
. YMMV.
reptyr
доступен в большинстве расширенных репозиториев пакетов и может использоваться следующим образом:
reptyr $(systemctl status systemd-interactive-simple-tty.service | grep Main\ PID | awk '{print $3}') # or just reptyr <pid>
Другим (более сложным [то есть больше, что может привести к сбою] )подходом будет создание службы разветвления с использованием экрана, аналогично этому:
# /etc/systemd/system/systemd-interactive-forking-screen.service
[Unit]
Description=Example systemd interactive forking screen service
[Service]
# https://www.freedesktop.org/software/systemd/man/systemd.exec.html
ExecStartPre=-/usr/bin/screen -X -S ${SCREEN_TITLE} kill # [optional] prevent multiple screens with the same name
ExecStart=/usr/bin/screen -dmS ${SCREEN_TITLE} -O -l /usr/bin/bash -c /usr/local/sbin/systemd-interactive.bash
# https://www.freedesktop.org/software/systemd/man/systemd.service.html
Type=forking
Environment=SCREEN_TITLE=systemd-interactive
RemainAfterExit=false
Restart=always
RestartSec=5s
SuccessExitStatus=1
[Install]
WantedBy=default.target
screen — полноэкранный оконный менеджер -, который мультиплексирует физический терминал между несколькими процессами. Это немного сложнее, чем все, что перечислено в первом, простом варианте. Лично я пользуюсь screen очень-очень давно и чувствую себя достаточно комфортно, чтобы доверять ему большинство вещей. Это бесценный инструмент.
Основным преимуществом по сравнению с вышеперечисленным является достойная поддержка termcap (, хотя и не такая хорошая, как у tmux ). Это просто означает, что ваша клавиша возврата, стрелки и т. д. будут работать лучше, чем с conspy
или reptyr
. screen
доступен в большинстве базовых репозиториев пакетов и может использоваться следующим образом:
screen -r systemd-interactive # CTRL-A+D to detach
Подобным подходом к разветвлению экрана будет разветвление tmux
. Служба systemd для tmux
почти такая же, как и для screen
. Но я не буду вдаваться в подробности, потому что уже поздно и я устал. Да, я используюtmux
намного чаще, чемscreen
(в эти дни ).
На самом деле, я пишу это в панели neovim в tmux
прямо сейчас. Но я все еще использовал screen
намного дольше. По моему опыту и мнению, tmux
слишком много для чего-то подобного. Конечно tmux
новее,имеет больше возможностей и является НАМНОГО лучшим мультиплексором оболочки, чем screen
, но... он еще более сложен. Наряду с этой дополнительной сложностью возникает дополнительная нестабильность.
Более важным, по крайней мере для меня, является то, что tmux
вылетает чаще, чем экран. Я указал экран как #2, потому что, если бы это был я, для чего-то подобного я бы, вероятно, просто использовал #1 с conspy
.
В зависимости от вашей программы; именованные каналы... службы systemd их тоже поддерживают! то есть
StandardInput=/path/to/named/pipe|
... и многое другое.