systemd подключается к stdin/stdout после запуска службы

Su comando buscará en el directorio de nivel superior /var/log/mbackupsy 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/mbackupsy 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 findreemplazando la acción -deletecon algo inocuo, como-print:

find /var/log/mbackups -mtime +7 -type f -print
3
07.07.2018, 16:48
1 ответ

Я могу придумать несколько способов сделать это. Конечно, у каждого есть свои нюансы.

  1. Вероятно, наиболее простым подходом было бы создание простого сервиса с выделенным 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
    

    Следующие параметры будут работать с указанным выше простым сервисом:

    1. conspy получает (удаленное )управление виртуальной консолью в текстовом режиме. Это, вероятно, ваш лучший выбор (с вышеупомянутой службой tty ). Он доступен в большинстве расширенных репозиториев пакетов и прост в использовании, например:

       conspy 20 # hit ESC+ESC+ESC (3 times quickly, to exit)
      
    2. chvt работает аналогично conspy, но делает /dev/ttyN приоритетным (локальным )терминалом. Он является частью коллекции kbd и устанавливается по умолчанию практически в каждом современном дистрибутиве Linux. Вот почему я подумал, что это стоит упомянуть. Основное предостережение с chvtзаключается в том, что вам нужно использовать подключенную клавиатуру, что, вероятно, не то, что вам нужно. Для приведенного выше примера службы chvtможно использовать так:

       chvt 20 # ALT+F1 to return to /dev/tty1
      
    3. 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>
      
  2. Другим (более сложным [то есть больше, что может привести к сбою] )подходом будет создание службы разветвления с использованием экрана, аналогично этому:

    # /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
    
  3. Подобным подходом к разветвлению экрана будет разветвление tmux. Служба systemd для tmuxпочти такая же, как и для screen. Но я не буду вдаваться в подробности, потому что уже поздно и я устал. Да, я используюtmuxнамного чаще, чемscreen(в эти дни ).

    На самом деле, я пишу это в панели neovim в tmuxпрямо сейчас. Но я все еще использовал screenнамного дольше. По моему опыту и мнению, tmuxслишком много для чего-то подобного. Конечно tmuxновее,имеет больше возможностей и является НАМНОГО лучшим мультиплексором оболочки, чем screen, но... он еще более сложен. Наряду с этой дополнительной сложностью возникает дополнительная нестабильность.

    Более важным, по крайней мере для меня, является то, что tmuxвылетает чаще, чем экран. Я указал экран как #2, потому что, если бы это был я, для чего-то подобного я бы, вероятно, просто использовал #1 с conspy.

  4. В зависимости от вашей программы; именованные каналы... службы systemd их тоже поддерживают! то есть

    StandardInput=/path/to/named/pipe|
    

... и многое другое.

14
27.01.2020, 21:15

Теги

Похожие вопросы