У меня определен следующий модуль systemd:
[Unit]
Description=Install awscli
Before=kubelet.service
[Service]
Type=oneshot
ExecStart=/usr/bin/apt-get remove python-pip -y ; /usr/bin/easy_install pip ; /usr/local/bin/pip install -U awscli
Когда этот модуль systemd запускается, в ответ на запуск kubelet.service я вижу следующий вывод:
Dec 10 14:54:35 ip-10-0-29-21 systemd[1]: Starting Install awscli...
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: Reading package lists...
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: Building dependency tree...
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: Reading state information...
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: The following packages were automatically installed and are no longer required:
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: python-colorama python-distlib python-html5lib
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: Use 'apt-get autoremove' to remove them.
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: The following packages will be REMOVED:
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: python-pip
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: 0 upgraded, 0 newly installed, 1 to remove and 101 not upgraded.
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: After this operation, 481 kB disk space will be freed.
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: [614B blob data]
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: Removing python-pip (1.5.6-5) ...
Dec 10 14:54:35 ip-10-0-29-21 apt-get[1269]: Processing triggers for man-db (2.7.0.2-5) ...
Dec 10 14:54:36 ip-10-0-29-21 systemd[1]: Started Install awscli.
Так что по какой-то причине в ExecStart была запущена только первая команда. Зачем?
Когда я затем вручную запускаю устройство, например sudo systemctl start myunit.service
, то я вижу, что все команды выполняются:
Dec 10 16:09:52 ip-10-0-29-21 systemd[1]: Starting Install awscli...
Dec 10 16:09:52 ip-10-0-29-21 apt-get[15612]: Reading package lists...
Dec 10 16:09:52 ip-10-0-29-21 apt-get[15612]: Building dependency tree...
...
Dec 10 16:09:52 ip-10-0-29-21 apt-get[15612]: Use 'apt-get autoremove' to remove them.
Dec 10 16:09:52 ip-10-0-29-21 apt-get[15612]: 0 upgraded, 0 newly installed, 0 to remove and 101 not upgraded.
Dec 10 16:09:53 ip-10-0-29-21 easy_install[15619]: Searching for pip
Dec 10 16:09:53 ip-10-0-29-21 easy_install[15619]: Reading https://pypi.python.org/simple/pip/
...
Dec 10 16:09:55 ip-10-0-29-21 easy_install[15619]: Installing pip2.7 script to /usr/local/bin
Dec 10 16:09:55 ip-10-0-29-21 easy_install[15619]: Installing pip2 script to /usr/local/bin
Dec 10 16:09:55 ip-10-0-29-21 easy_install[15619]: Installed /usr/local/lib/python2.7/dist-packages/pip-19.3.1-py2.7.egg
Dec 10 16:09:55 ip-10-0-29-21 easy_install[15619]: Processing dependencies for pip
Dec 10 16:09:55 ip-10-0-29-21 easy_install[15619]: Finished processing dependencies for pip
Dec 10 16:09:56 ip-10-0-29-21 pip[15632]: DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will
Dec 10 16:09:57 ip-10-0-29-21 pip[15632]: Collecting awscli
Dec 10 16:09:57 ip-10-0-29-21 pip[15632]: Downloading https://files.pythonhosted.org/packages/37/e1/ca2ee8f55258dbb976106420adecdf52db6417216199bd1392acd1fff9f7/awscli-1.16.299-py2.py3-none-any.whl (2.5MB)
Dec 10 16:09:58 ip-10-0-29-21 pip[15632]: Collecting s3transfer<0.3.0,>=0.2.0
Dec 10 16:09:58 ip-10-0-29-21 pip[15632]: Downloading https://files.pythonhosted.org/packages/16/8a/1fc3dba0c4923c2a76e1ff0d52b305c44606da63f718d14d3231e21c51b0/s3transfer-0.2.1-py2.py3-none-any.whl (70kB)
...
Dec 10 16:10:02 ip-10-0-29-21 pip[15632]: Uninstalling awscli-1.15.28:
Dec 10 16:10:02 ip-10-0-29-21 pip[15632]: Successfully uninstalled awscli-1.15.28
Dec 10 16:10:02 ip-10-0-29-21 pip[15632]: Successfully installed awscli-1.16.299 botocore-1.13.35 s3transfer-0.2.1 urllib3-1.25.7
Dec 10 16:10:02 ip-10-0-29-21 systemd[1]: Started Install awscli.
Моя теория заключается в том, что блок start
второй раз работает правильно, потому что apt-get ничего делать не нужно. Что заставило бы systemd остановиться после первой команды просто потому, что apt-get сработал? Это проблема разветвления?