Запускать скрипт Python при запуске

Еще один вариант — это вариант ответа @Jagadish:наstraceдемона ssh.

У него есть существенное преимущество: нам не нужно останавливать sshd, что может привести к полной блокировке, если что-то пойдет не так.

Во-первых, мы находим pid основного процесса sshd. Здесь мы можем увидеть это, выполнив pstree -pa|less.

  |-sshd,633 -D  <-- THIS IS WHAT WE WANT!
  |   `-sshd,21973   
  |       `-sshd,21996    
  |           `-bash,22000
  |               `-screen,638 -r

Зная, что pid равен 633, мы можем straceего, следуя его потомкам:

strace -p 633 -s 4096 -f -o sux

В результате все, что сделал этот sshd и его дочерние процессы, будут переданы -в файл с именем suxв локальном каталоге.

Затем воспроизведите проблему.

У него будет огромный список журналов вызовов ядра, которые в основном непонятны/неактуальны для нас, но не везде. В моем случае важным было вот это:

6834  sendto(4, "<38>Jan 15 18:49:21 sshd[6834]: User cica not allowed because account is locked\0", 84, MSG_NOSIGNAL, NULL, 0) = 84

Имелось в виду, что sshd пытался запротоколировать сообщение Пользователь cica не разрешен, т.к. учетная запись заблокирована-только не смог, т.к. логирование недостаточно подробное для этого. Но мы уже знаем, что публичный ключ был отклонен, потому что учетная запись была заблокирована.

Это еще не решение -теперь надо гуглить, что означает "заблокированный аккаунт" в случае с sshd. Скорее всего, это будет какое-то тривиальное /etc/passwd, /etc/shadowволшебство,но главное сделано -проблема не таинственная, а легко поддающаяся отладке/поиск в Google.

0
14.02.2021, 16:29
1 ответ

Запустите его как службу.

Создать/etc/systemd/system/myscript.service:

[Unit]
Description=My Script

[Service]
ExecStart=/usr/bin/python3 /path/script.py

[Install]
WantedBy=multi-user.target

Затем запустите его с помощью:

sudo systemctl start myscript    # Runs the script now
sudo systemctl enable myscript   # Sets the script to run every boot

Есть много других вещей, которые вы можете сделать, например, запустить его от имени определенного пользователя с помощью User=, настроить его на запуск только после того, как сеть будет доступна с помощью After=networking.targetили множество других вещей. Если он запускает графический интерфейс, вы, вероятно, захотите запустить его как службу пользователя -.

Дополнительные параметры см. вman systemd.unitи man systemd.service.

1
18.03.2021, 22:30

Теги

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