На основе кода 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 скажет вам, закрыт ли лоток и есть диск.
То, что должен выполнять ваш сценарий таким образом, - 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
То, что должен выполнять ваш сценарий таким образом, - 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/
То, что должен выполнять ваш сценарий таким образом, - 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/