Сценарий запуска/выключения для RedHat

Solución extendidaPython:

sort_html_by_date.pyguión:

from bs4 import BeautifulSoup
from datetime import datetime

with open('input.html') as html_doc:    # replace with your actual html file name
    soup = BeautifulSoup(html_doc, 'lxml')
    divs = {}
    for div in soup.find_all('div', 'date'):
        divs[datetime.strptime(div.string, '%a %B %d %Y')] = \
            str(div) + '\n' + div.find_next_sibling('ul').prettify()

    soup.body.clear()
    for el in sorted(divs, reverse=True):
        soup.body.append(divs[el])

    print(soup.prettify(formatter=None))

Uso:

python sort_html_by_date.py

La salida:

 

 
 
 
  
Fri May 25 2018
  • Modify the website according to GDPR
  • Watch YouTube
Thu May 24 2018
  • Solve the world's hunger problem
    • Don't tell anyone
  • Get something to wear
Wed May 23 2018
  • Do laundry
    • Get coins
  • Wash the dishes

Módulos usados ​​:

hermosa sopa-https://www.crummy.com/software/BeautifulSoup/bs4/doc/
fecha y hora-https://docs.python.org/3.3/library/datetime.html#module-datetime

0
19.09.2017, 11:53
1 ответ

Кажется, я решил ее для screen...

Сначала я удалил этот параметр Restart=always.

Чтобы все заработало, мне также пришлось добавить RemainAfterExit=True.

Со старыми сценариями инициализации было понятно, где взять код. Я действительно не знаю, где правильно разместить остальную часть кода. Должен ли я просто вызвать свой скрипт из ExecStart=?


Мои дополнительные выводы во время обучения.

статус

Есть хороший вопрос (Я имел в виду, что мне тоже было интересно ), как реализовать проверку состояния-пользовательское сообщение о состоянии systemd?

Короткий ответ: он работает (каким-то образом )из коробки = вам не нужно особо заботиться.

Итак, для моей тестовой службы экрана _я могу позвонить systemctl status test_screen.serviceи получить

● test_screen.service - Testing `screen` service
   Loaded: loaded (/etc/systemd/system/test_screen.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2017-09-20 12:48:34 CEST; 1s ago
  Process: 36633 ExecStart=/bin/screen -d -m -S test_screen (code=exited, status=0/SUCCESS)
 Main PID: 36634 (screen)
   CGroup: /system.slice/test_screen.service
           ├─36634 /bin/SCREEN -d -m -S test_screen
           └─36635 /bin/sh

Sep 20 12:48:34 somehostname systemd[1]: Starting Testing `screen` service...
Sep 20 12:48:34 somehostname systemd[1]: Started Testing `screen` service.

...странно то, что когда я останавливаю его, для статуса я получаю отказ:

● test_screen.service - Testing `screen` service
   Loaded: loaded (/etc/systemd/system/test_screen.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2017-09-20 12:51:00 CEST; 1s ago
  Process: 36805 ExecStop=/bin/screen -S test_screen -X quit (code=exited, status=0/SUCCESS)
  Process: 36633 ExecStart=/bin/screen -d -m -S test_screen (code=exited, status=0/SUCCESS)
 Main PID: 36634 (code=exited, status=1/FAILURE)

Sep 20 12:48:34 somehostname systemd[1]: Starting Testing `screen` service...
Sep 20 12:48:34 somehostname systemd[1]: Started Testing `screen` service.
Sep 20 12:51:00 somehostname systemd[1]: Stopping Testing `screen` service...
Sep 20 12:51:00 somehostname systemd[1]: test_screen.service: main process exited, code=exited, status=1/FAILURE
Sep 20 12:51:00 somehostname systemd[1]: Stopped Testing `screen` service.
Sep 20 12:51:00 somehostname systemd[1]: Unit test_screen.service entered failed state.
Sep 20 12:51:00 somehostname systemd[1]: test_screen.service failed.

, чтобы преодолеть это, мне нужно было RemainAfterExit=True(, потому что я попробовал предложение иметь Type=forkingи закомментировал этот вариант RemainAfterExit).

список -блок -файлы

У меня была проблема, которую я не могу воспроизвести сейчас -когда я попытался systemctl startответ был что-то вроде "Нет файла модуля", поэтому мне было интересно, нужно ли как-то регистрировать его.

Нет, не нужно. Вы можете выполнить systemctl list-unit-files --type=service, и вы должны увидеть там свой отряд. Моя проблема заключалась в том, что параметр ExecStartбыл неправильным. Когда я попробовал то же самое, теперь мне стало легче понять сообщение:

$ systemctl start test_screen.service
Job for test_screen.service failed because the control process exited with error code. See "systemctl status test_screen.service" and "journalctl -xe" for details.

$ systemctl status test_screen.service
● test_screen.service - Testing `screen` service
   Loaded: loaded (/etc/systemd/system/test_screen.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2017-09-20 12:55:53 CEST; 1min 3s ago
  Process: 37344 ExecStart=/bin/screen2 -d -m -S test_screen (code=exited, status=203/EXEC)
 Main PID: 36634 (code=exited, status=1/FAILURE)

Sep 20 12:55:53 somehostname systemd[1]: Starting Testing `screen` service...
Sep 20 12:55:53 somehostname systemd[37344]: Failed at step EXEC spawning /bin/screen2: No such file or directory
Sep 20 12:55:53 somehostname systemd[1]: test_screen.service: control process exited, code=exited status=203
Sep 20 12:55:53 somehostname systemd[1]: Failed to start Testing `screen` service.
Sep 20 12:55:53 somehostname systemd[1]: Unit test_screen.service entered failed state.
Sep 20 12:55:53 somehostname systemd[1]: test_screen.service failed.

Выполнение скрипта

Я попытался модифицировать свой тестовый _экран для вызова скрипта

$ cat /etc/systemd/system/test_screen_script.service
[Unit]
Description=Testing `screen` service

[Service]
Type=forking
ExecStart=/root/test_screen_start.sh
ExecStop=/root/test_screen_stop.sh
#Environment=
#Restart=always
RemainAfterExit=True

[Install]
WantedBy=default.target

в то время как скрипты просто обертываются для предыдущих вызовов

$ cat /root/test_screen_start.sh
/bin/screen -d -m -S test_screen
$ cat /root/test_screen_stop.sh
/bin/screen -S test_screen -X quit

когда я это сделал, он не запускается:

$ systemctl start test_screen_script
Job for test_screen_script.service failed because the control process exited with error code. See "systemctl status test_screen_script.service" and "journalctl -xe" for details.

$ systemctl status test_screen_script.service
● test_screen_script.service - Testing `screen` service
   Loaded: loaded (/etc/systemd/system/test_screen_script.service; disabled; vendor preset: disabled)
   Active: failed (Result: exit-code) since Wed 2017-09-20 15:47:59 CEST; 8s ago
  Process: 63582 ExecStart=/root/test_screen_start.sh (code=exited, status=203/EXEC)
 Main PID: 60698 (code=exited, status=0/SUCCESS)

Sep 20 15:47:59 somehostname systemd[1]: Starting Testing `screen` service...
Sep 20 15:47:59 somehostname systemd[63582]: Failed at step EXEC spawning /root/test_screen_start.sh: Exec format error
Sep 20 15:47:59 somehostname systemd[1]: test_screen_script.service: control process exited, code=exited status=203
Sep 20 15:47:59 somehostname systemd[1]: Failed to start Testing `screen` service.
Sep 20 15:47:59 somehostname systemd[1]: Unit test_screen_script.service entered failed state.
Sep 20 15:47:59 somehostname systemd[1]: test_screen_script.service failed.

Было бы хорошо, если бы кто-нибудь мог описать причину. Исправление для этого состоит в том, чтобы добавить #!/bin/bash.

Ссылки

0
28.01.2020, 04:39

Теги

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