Разве это не цель экспорта (встроенная функция) в bash? export FOO = bar
См. справочные страницы для bash .
Он мертв, потому что сценарий достигает своей конечной точки и завершается. Почему один оператор print
может взорвать терминал? Демон обычно работает в цикле, который проверяет, наступило ли время выхода, и завершает работу, если это так (, или если он перехватывает сигнал от ядра ).
Ваш скрипт обычно запускается как служба, завершается довольно быстро (, так как есть только одна команда и в ней нет цикла while или чего-то подобного -ее выполнение )и поэтому служба завершается быстрее, чем вы может запросить его статус. Попробуйте добавить цикл (с тайм-аутом, чтобы не спамить ваши журналы ), чтобы иметь возможность видеть его активным:
while True:
print('hello')
time.sleep(2)
и убейте его через systemctl, как только вы увидите (сjournalctl -u test.service
)достаточно.
Ваш скрипт Python печатает «hello world», затем Python понимает, что достиг конца вашего скрипта, и прекращает выполнение.
Что вы хотите, чтобы systemd делал?
попробуйте такой простой скрипт sh:
#!/bin/sh
touch /tmp/myfile$$.txt
echo /tmp/myfile$$.txt
tail -f /tmp/myfile$$.txt
Вы получаете имя <file>
в сервисном статусе.
Затем в своем терминале просто введите в него какой-нибудь текст:echo "Hello World" >> <file>
и проверьте сервис.
Служба, которая зацикливается и печатает повторно, заполнит ваш терминал... здесь вы читаете файл и можете в любой момент передать ему какой-нибудь текст. При каждом запуске службы создается новый файл, $$
— это PID, затем в качестве упражнения удалите файл /tmp/myfile$$.txt
при остановке службы;-)
Ключевое слово для упражнения:trap
— в одну сторону ;-)
Делайте вещи простыми, учитесь, а затем добавляйте к этому. Обратите внимание, что python также может реагировать на сигналы. Я выбрал ш, потому что он проще... для начала...