{
    "version": "https:\/\/jsonfeed.org\/version\/1.1",
    "title": "Balyn Omavel: заметки с тегом centos",
    "_rss_description": "Balyn Omavel",
    "_rss_language": "ru",
    "_itunes_email": "",
    "_itunes_categories_xml": "",
    "_itunes_image": "",
    "_itunes_explicit": "",
    "home_page_url": "https:\/\/omavel.in\/tags\/centos\/",
    "feed_url": "https:\/\/omavel.in\/tags\/centos\/json\/",
    "icon": "https:\/\/omavel.in\/pictures\/userpic\/userpic@2x.jpg?1694896121",
    "authors": [
        {
            "name": "Balyn Omavel 🍷",
            "url": "https:\/\/omavel.in\/",
            "avatar": "https:\/\/omavel.in\/pictures\/userpic\/userpic@2x.jpg?1694896121"
        }
    ],
    "items": [
        {
            "id": "1",
            "url": "https:\/\/omavel.in\/all\/kak-sledit-za-izmeneniem-faylov-v-centos-rhel-cherez-path-units\/",
            "title": "Как следить за изменением файлов в CentOS\/RHEL через path units?",
            "content_html": "<p>При запуске демона, systemd читает его конфигурацию из коллекции <a href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/systemd.unit.html\">юнит-файлов<\/a>. Есть специальные path-юниты, которые позволяют мониторить события, связанные с директориями и файлами. Если определенное событие наступает, запускается сервис-юнит.<\/p>\n<p>Допустим, мы хотим знать об изменениях файла <tt>test<\/tt> в домашней директории.<\/p>\n<p>Создаем path-юнит <tt>\/etc\/systemd\/system\/example.path<\/tt><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">[Unit]\r\nDescription=Monitor test file for changes\r\n[Path]\r\nPathChanged=\/home\/omavel\/test\r\nUnit=example.service\r\n[Install]\r\nWantedBy=multi-user.target<\/code><\/pre><p><tt><b>PathChanged<\/b><\/tt> абсолютный путь до файла<br \/>\n<tt><b>Unit<\/b><\/tt> название сервис-юнита который мы опишем дальше, он будет запускаться при изменении файла. Можно не указывать, если название сервиса совпадает с path-юнитом (в приведенном примере они совпадают — <i>example<\/i>.path, <i>example<\/i>.service)<br \/>\n<tt><b>WantedBy<\/b><\/tt> юнит запускается в режиме multi-user операционной системы. Проверить можно командой<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">systemctl get-default<\/code><\/pre><p>Далее создаем сервис-юнит <tt>\/etc\/systemd\/system\/example.service<\/tt><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">[Unit]\r\nDescription=Executes script when a file has changed\r\n[Service]\r\nType=simple\r\nExecStart=\/home\/omavel\/script.sh\r\n[Install]\r\nWantedBy=multi-user.target<\/code><\/pre><p>Заведем скрипт <tt>\/home\/omavel\/script.sh<\/tt>, который будет запускаться сервисом<br \/>\nСкрипт отмечает факт изменения файла в <tt>output.log<\/tt><\/p>\n<pre class=\"e2-text-code\"><code class=\"\">#!\/bin\/bash\r\necho &quot;`date` file changed&quot; &gt;&gt; \/home\/omavel\/output.log<\/code><\/pre><p>Сделаем скрипт исполняемым<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">chmod +x \/home\/omavel\/script.sh<\/code><\/pre><p>Включим автоматический запуск обоих юнитов при загрузке и запустим path<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">systemctl enable example.{path,service}\r\nsystemctl start example.path<\/code><\/pre><p>Протестируем<\/p>\n<pre class=\"e2-text-code\"><code class=\"\">echo &gt; \/home\/omavel\/test<\/code><\/pre><p>В логе должна появиться новая строка<br \/>\n<tt>Mon Jul 15 10:15:20 MSK 2019 file changed<\/tt><\/p>\n<h2>Таким образом<\/h2>\n<ul>\n<li>Path-юнит запущен всегда и следит за изменениями файла<\/li>\n<li>При наступлении события, он запускает сервис-юнит<\/li>\n<li>Сервис-юнит запускает скрипт (или что угодно)<\/li>\n<li>Скрипт пишет в лог (или куда угодно)<\/li>\n<\/ul>\n<h2>Ограничения<\/h2>\n<ul>\n<li>Способ не подходит для мониторинга NFS, так как использует <a href=\"http:\/\/man7.org\/linux\/man-pages\/man7\/inotify.7.html\">inotyfy API<\/a><\/li>\n<\/ul>\n<h2>Что еще?<\/h2>\n<ol start=\"1\">\n<li>В <tt>ExecStart<\/tt> сервис-юнита можно сразу указывать бинарник с параметрами, например так я отправляю данные в Zabbix Trapper:<\/li>\n<\/ol>\n<pre class=\"e2-text-code\"><code class=\"\">ExecStart=\/bin\/zabbix_sender -z zabbix.server -s hostname -k itemkey -o &quot;1&quot;<\/code><\/pre><ol start=\"2\">\n<li>Помимо <tt><b>PathChanged<\/b><\/tt> <a href=\"https:\/\/www.freedesktop.org\/software\/systemd\/man\/systemd.path.html\">есть несколько других параметров<\/a><\/li>\n<\/ol>\n",
            "date_published": "2019-07-15T11:23:47+04:00",
            "date_modified": "2019-07-15T15:23:30+04:00",
            "tags": [
                "centos",
                "rhel",
                "systemd",
                "zabbix"
            ],
            "_date_published_rfc2822": "Mon, 15 Jul 2019 11:23:47 +0400",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "1",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [
                    "system\/library\/highlight\/highlight.js",
                    "system\/library\/highlight\/highlight.css"
                ],
                "og_images": []
            }
        }
    ],
    "_e2_version": 4116,
    "_e2_ua_string": "Aegea 11.2 (v4116)"
}