OpenSuse Tumbleweed: Как запустить bash-скрипт при запуске?

Вопрос или проблема

Я пытаюсь запустить .sh файл при загрузке rPi3B+, работающего на openSuse Tumbleweed JeOS. Скрипт очень простой и выглядит так:

node /home/user_name/path/to/the/file.js

Вот две ссылки, которые я пытался просмотреть:

https://forums.opensuse.org/showthread.php/428743-How-to-run-script-at-startup
https://www.suse.com/c/easy-running-scripts-boot-and-shutdown/
https://doc.opensuse.org/documentation/leap/startup/html/book.opensuse.startup/cha.adm.shell.html

Как мне поступить в этой ситуации?

Правка: Я также пробовал следовать этой ссылке, но безуспешно: https://stackoverflow.com/questions/12973777/how-to-run-a-shell-script-at-startup#12973826

Мой startServer скрипт в /etc/init.d выглядит так:

#!/bin/sh
# ScriptName=startServer
node /home/user-name/server.js &

/etc/init.d/after.local

Создайте этот файл и вызовите ваш script.sh из него, он будет выполняться от имени root.

Кроме того, вы можете вызвать его через su -c '/path/yourscript.sh' username, где username — это любой действующий пользователь.

После полной загрузки системы, если /etc/init.d/after.local существует, то всё, что в нем находится, будет выполнено. Вы можете использовать chmod 600 /etc/init.d/after.local и chown root.root /etc/init.d/after.local, если вас беспокоит безопасность.

Ваш скрипт StartServer в /etc/init.d выглядит так:

/etc/init.d/StartServer.sh

Он содержит

#!/bin/sh
# ScriptName=startServer
node /home/user-name/server.js &

Создайте /etc/init.d/after.local и его содержимое будет просто

/etc/init.d/StartServer.sh
  1. После полной загрузки системы, на последнем этапе [это особенность suse] будет попытка исполнить файл /etc/init.d/after.local, если он существует
  2. Вы вручную создаете /etc/init.d/after.local и помещаете в него /etc/init.d/StartServer.sh
  3. Ваш скрипт StartServer.sh выполняется после полной загрузки системы.

openSUSE, как Leap, так и Tumbleweed, перешли на systemd давно. Ничего не должно находиться под /etc/init.d.

Все сервисы должны поставляться с шаблонами запуска systemd *.service, расположенными под /usr/lib/systemd/system (если нет, вы можете легко создать свой собственный *myserver*.service под /etc/systemd/system).

В соответствующем .service файле добавьте строку

ExecStartPost=/usr/bin/sh -c "node /home/user-name/server.js &"

после строки ExecStart=, которая запускает сервис. Также рассмотрите возможность остановки вашего server.js через соответствующую запись ExecStopPre=.

Ответ или решение

Для того чтобы запустить bash-скрипт при старте системы на Raspberry Pi 3B+, работающем под управлением openSUSE Tumbleweed JeOS, лучше всего использовать систему инициализации systemd, которая является стандартной в современных версиях openSUSE.

Вот пошаговая инструкция о том, как это сделать:

Шаг 1: Создайте ваш bash-скрипт

Предположим, ваш скрипт называется startServer.sh. Его содержимое будет следующим:

#!/bin/bash
# ScriptName=startServer
node /home/user-name/path/to/the/file.js &

Сохраните этот файл и предоставьте ему права на выполнение:

chmod +x /path/to/startServer.sh

Шаг 2: Создайте unit-файл для systemd

Необходимо создать файл службы systemd. Перейдите к директории /etc/systemd/system и создайте новый файл, например myserver.service:

sudo nano /etc/systemd/system/myserver.service

Вставьте в него следующее содержимое:

[Unit]
Description=My Node.js Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/node /home/user-name/path/to/the/file.js
WorkingDirectory=/home/user-name/path/to/
User=user-name
Restart=on-failure

[Install]
WantedBy=multi-user.target

Шаг 3: Включите и запустите службу

После создания файла службы необходимо перезагрузить конфигурацию systemd и включить службу, чтобы она запускалась при старте системы:

sudo systemctl daemon-reload
sudo systemctl enable myserver.service
sudo systemctl start myserver.service

Шаг 4: Проверьте статус службы

Чтобы убедиться, что ваша служба запущена и работает правильно, используйте команду:

sudo systemctl status myserver.service

Заключение

Теперь ваш скрипт будет автоматически запускаться при загрузке системы на Raspberry Pi под управлением openSUSE Tumbleweed. Если у вас возникнут какие-либо ошибки, вы можете просмотреть логи службы с помощью следующей команды:

journalctl -u myserver.service

Таким образом, вы сможете диагностировать и исправить любые проблемы, которые могут возникнуть.

Оцените материал
Добавить комментарий

Капча загружается...