Сценарий, начинающийся с загрузки и автоматического перезапуска при сбое

На основе кода C @ terdon я написал версию в Python:

#!/usr/bin/python
import os, fcntl, CDROM, sys

def drive_status(drive):
  fd = os.open(drive, os.O_RDONLY | os.O_NONBLOCK)
  rv = fcntl.ioctl(fd, CDROM.CDROM_DRIVE_STATUS)
  os.close(fd)
  return rv

sys.exit(drive_status(sys.argv[1]) != CDROM.CDS_TRAY_OPEN)

Очевидно, что она может использовать некоторую любовь к комментариям и обработке аргументов cmdline, но если вам нужна версия Python .. .

Также обратите внимание, что модуль CDROM может быть специфичным для Linux и что не все диски поддерживают запросы (например, ioctl () вернет CDS_NO_INFO). [!d2 ]

Существуют другие константы CDROM.CDS_*, которые предоставляют полезные варианты. В частности, CDS_DISK_OK скажет вам, закрыт ли лоток и есть диск.

2
задан 22 May 2017 в 21:30

3 ответа

То, что должен выполнять ваш сценарий таким образом, - systemd sevice.

Примером может служить следующий пример:

[Unit]
Description=My Script


[Service]
Type=forking    
ExecStart=/path/to/script
Restart=on-failure

[Install]
WantedBy=multi-user.target

Это можно сделать в нескольких Способы:

Поместите свой скрипт в другое место и получите доступ к нему из файлов службы systemd. Поместите код непосредственно в файл службы systemd.

Я считаю, что первый вариант идеален в вашей ситуации. Теперь после завершения работы с обычными systemctl командами, такими как:

sudo systemctl enable myscript.service
sudo systemctl status myscript.service
sudo systemctl stop myscript.service
sudo systemctl start myscript.service

Источники:

https://www.digitalocean.com/community/tutorials/

https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

1
ответ дан 22 May 2018 в 22:21

То, что должен выполнять ваш сценарий таким образом, - systemd sevice.

Примером может служить следующий пример:

[Unit] Description=My Script [Service] Type=forking ExecStart=/path/to/script Restart=on-failure [Install] WantedBy=multi-user.target

Это можно сделать в нескольких Способы:

Поместите свой скрипт в другое место и получите доступ к нему из файлов службы systemd. Поместите код непосредственно в файл службы systemd.

Я считаю, что первый вариант идеален в вашей ситуации. Теперь после завершения работы с обычными systemctl командами, такими как:

sudo systemctl enable myscript.service sudo systemctl status myscript.service sudo systemctl stop myscript.service sudo systemctl start myscript.service

Источники:

https://www.digitalocean.com/community/tutorials/

https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

1
ответ дан 18 July 2018 в 12:54

То, что должен выполнять ваш сценарий таким образом, - systemd sevice.

Примером может служить следующий пример:

[Unit] Description=My Script [Service] Type=forking ExecStart=/path/to/script Restart=on-failure [Install] WantedBy=multi-user.target

Это можно сделать в нескольких Способы:

Поместите свой скрипт в другое место и получите доступ к нему из файлов службы systemd. Поместите код непосредственно в файл службы systemd.

Я считаю, что первый вариант идеален в вашей ситуации. Теперь после завершения работы с обычными systemctl командами, такими как:

sudo systemctl enable myscript.service sudo systemctl status myscript.service sudo systemctl stop myscript.service sudo systemctl start myscript.service

Источники:

https://www.digitalocean.com/community/tutorials/

https://www.digitalocean.com/community/tutorials/understanding-systemd-units-and-unit-files

1
ответ дан 24 July 2018 в 20:03

Другие вопросы по тегам:

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