Одной из задач, решение которых потребовало времени, явилась необходимость выполнения команды остановки работы графических клиентов клиентов Mega и Облако@Mail.Ru без участия оператора компьютера, то есть производимых по расписанию. Другими словами – организация полной автоматизации циклов "Запуск клиента – Синхронизация – Выход из приложения" .
Стремление решить такую задачу было обусловлено тем, что "лавры" удобства использования клиента синхронизации Dropbox через команды запуска и остановки, осуществляемые в автоматическом режиме по расписанию, долгое время не давали покоя.
Если с запуском графических клиента синхронизации Mega и Cloud@Mail.Ru вопросов не возникало (запуск осуществляется командами megasync и cloud), то как останавливать их работу без вызова контекстного меню управления через значок системного лотка (трея) было не понятно.
В конце концов было выяснено, что таких терминальных команд для указанных графических клиентов не существует (или мне их так и не удалось найти), поэтому завершение работы приложения пришлось осуществлять через закрытие процесса (megasync или cloud). Например, в диспетчере задач XFCE указанные процессы отображаются как:
Как пишет автор этой публикации, чтобы "попросить процесс (вежливо) остановиться" используется команда SIGTERM, соответствующая выполнению команды kill -15.
В ходе практической проверки команда kill -15 megasync (то есть с указанием имени процесса) не была выполнена, так как SIGTERM вместо имени процесса требует указывать его pid. Поэтому перед выполнением SIGTERM требуется получить pid процесса megasync, который каждый раз будет разным.
Получение pid процесса megasync осуществляется командой pidof megasync
Первоначальное решение заключалось в записи полученного pid в файл
pidof megasync > /home/minter/megasync.txt
и последующей записи pid в переменную путём считыванием 1-й строки megasync.txt
MYVAR=`sed -n '1p' /home/minter/megasync.txt`
Примечание. /home/minter/ можно заменить на ~/
Далее осуществляется выполнение kill -15 $MYVAR, то есть kill -15 pid-megasync
Желаемый результат был достигнут, а промежуточные данные в виде файла megasync.txt подлежали удалению: rm /home/minter/megasync.txt
Полный текст скрипта составил:
#!/bin/bash
pidof megasync > /home/minter/megasync.txt
MYVAR=`sed -n '1p' /home/minter/megasync.txt`
kill -15 $MYVAR
rm /home/minter/megasync.txt
exit
Однако впоследствии были предприняты поиски решения, при котором полученный pid можно было бы кратковременно запомнить и подставить это значение в kill -15 pid-megasync.
Благодаря автору этой публикации, решение данной задачи свелось к двум строкам кода:
OUTPUT="$(pidof megasync)"
kill -15 ${OUTPUT}
После подстановки полученного ${OUTPUT} после kill -15 было реализовано "мягкое" завершение работы процесса megasync, которое по своему функционалу соответствует команде "Выход", вызываемой из графического индикатора клиента MegaSync.
Скрипт был оформлен как файл sh и ему было назначено выполнение по расписанию.
#!/bin/bash
OUTPUT="$(pidof megasync)"
kill -15 ${OUTPUT}
exit
Стремление решить такую задачу было обусловлено тем, что "лавры" удобства использования клиента синхронизации Dropbox через команды запуска и остановки, осуществляемые в автоматическом режиме по расписанию, долгое время не давали покоя.
Если с запуском графических клиента синхронизации Mega и Cloud@Mail.Ru вопросов не возникало (запуск осуществляется командами megasync и cloud), то как останавливать их работу без вызова контекстного меню управления через значок системного лотка (трея) было не понятно.
В конце концов было выяснено, что таких терминальных команд для указанных графических клиентов не существует (или мне их так и не удалось найти), поэтому завершение работы приложения пришлось осуществлять через закрытие процесса (megasync или cloud). Например, в диспетчере задач XFCE указанные процессы отображаются как:
Как пишет автор этой публикации, чтобы "попросить процесс (вежливо) остановиться" используется команда SIGTERM, соответствующая выполнению команды kill -15.
В ходе практической проверки команда kill -15 megasync (то есть с указанием имени процесса) не была выполнена, так как SIGTERM вместо имени процесса требует указывать его pid. Поэтому перед выполнением SIGTERM требуется получить pid процесса megasync, который каждый раз будет разным.
Получение pid процесса megasync осуществляется командой pidof megasync
Первоначальное решение заключалось в записи полученного pid в файл
pidof megasync > /home/minter/megasync.txt
и последующей записи pid в переменную путём считыванием 1-й строки megasync.txt
MYVAR=`sed -n '1p' /home/minter/megasync.txt`
Примечание. /home/minter/ можно заменить на ~/
Далее осуществляется выполнение kill -15 $MYVAR, то есть kill -15 pid-megasync
Желаемый результат был достигнут, а промежуточные данные в виде файла megasync.txt подлежали удалению: rm /home/minter/megasync.txt
Полный текст скрипта составил:
#!/bin/bash
pidof megasync > /home/minter/megasync.txt
MYVAR=`sed -n '1p' /home/minter/megasync.txt`
kill -15 $MYVAR
rm /home/minter/megasync.txt
exit
Однако впоследствии были предприняты поиски решения, при котором полученный pid можно было бы кратковременно запомнить и подставить это значение в kill -15 pid-megasync.
Благодаря автору этой публикации, решение данной задачи свелось к двум строкам кода:
OUTPUT="$(pidof megasync)"
kill -15 ${OUTPUT}
После подстановки полученного ${OUTPUT} после kill -15 было реализовано "мягкое" завершение работы процесса megasync, которое по своему функционалу соответствует команде "Выход", вызываемой из графического индикатора клиента MegaSync.
Скрипт был оформлен как файл sh и ему было назначено выполнение по расписанию.
#!/bin/bash
OUTPUT="$(pidof megasync)"
kill -15 ${OUTPUT}
exit
Комментариев нет:
Отправить комментарий