Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Ubuntu server: как сделать автозапуск bash скрипта при загрузке системы?  (Прочитано 1388 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sasha300

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
  • Xubuntu 18.04
    • Просмотр профиля
Добрый день!
Установлена Ubuntu server 18.04, через ssh запускаю приложение Leanote-server командой:
bash /home/sas/leanote/bin/run.sh &Как его добавить в автозагрузку?
Заранее спасибо!

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2115
  • Lubuntu 16.04 LTS
    • Просмотр профиля
Как его добавить в автозагрузку?

1. Создать systemd юнит с автозапуском скрипта
2. Используя cron с параметром "@reboot"
3. Файл .bashrc в домашнем каталоге.


Оффлайн sasha300

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
  • Xubuntu 18.04
    • Просмотр профиля
1. Создать systemd юнит с автозапуском скрипта
Именно этот вариант я изначально выбрал, но ничерта не получилось, подробности ниже
2. Используя cron с параметром "@reboot"
3. Файл .bashrc в домашнем каталоге.
Ну cron не нужен, мне не нужно систематический перезапуск. Включил/перезапустил сервак - запустился скрипт. Тут, как понимаю, только при перезагрузке будет срабатывать, что не айс. По поводу ".bashrc в домашнем каталоге" - скрипт должен запускаться вне зависимости от захода в систему,  поэтому тоже отпадает.
Короче выбираем самый правильный вариант - первый. Нужно создать systemd юнит, набираю:
sudo touch /etc/systemd/system/run.service
sudo chmod 664 /etc/systemd/system/run.service
в файле run.service прописываю:
[Unit]
Description=run

[Service]
ExecStart=/home/sas/leanote/bin/run.sh

[Install]
WantedBy=multi-user.target
затем в терминале пишу:
sudo systemctl daemon-reload
sudo system start run
Но скрипт /home/sas/leanote/bin/run.sh не срабатывает =(
ЧЯДНТ?

Пользователь добавил сообщение 30 Апрель 2019, 15:33:17:
Затем делаю скрипт исполняемым и добавляю в автозагрузку:
sudo chmod +x run.sh
sudo systemctl enable run
Но зайти в приложение не могу, тогда как в статусе висит, что все сработало:
$> sudo systemctl status run

  Loaded: loaded (/etc/systemd/system/run.service; enabled; vendor preset: enabled)
   Active: failed (Result: exit-code) since Tue 2019-04-30 15:38:13 MSK; 1min 5s ago
  Process: 488 ExecStart=/home/sas/leanote/bin/run.sh (code=exited, status=2)
 Main PID: 488 (code=exited, status=2)

апр 30 15:38:13 VirtualBox run.sh[488]: github.com/leanote/leanote/vendor/github.com/revel/revel.runStartupHooks()
апр 30 15:38:13 VirtualBox run.sh[488]:         /Users/life/Documents/Go/package_base/src/github.com/leanote/leanote/vendor/github.co
апр 30 15:38:13 VirtualBox run.sh[488]: github.com/leanote/leanote/vendor/github.com/revel/revel.InitServer()
апр 30 15:38:13 VirtualBox run.sh[488]:         /Users/life/Documents/Go/package_base/src/github.com/leanote/leanote/vendor/github.co
апр 30 15:38:13 VirtualBox run.sh[488]: github.com/leanote/leanote/vendor/github.com/revel/revel.Run(0x0)
апр 30 15:38:13 VirtualBox run.sh[488]:         /Users/life/Documents/Go/package_base/src/github.com/leanote/leanote/vendor/github.co
апр 30 15:38:13 VirtualBox run.sh[488]: main.main()
апр 30 15:38:13 VirtualBox run.sh[488]:         /Users/life/Documents/Go/package_base/src/github.com/leanote/leanote/app/tmp/main.go:
апр 30 15:38:13 VirtualBox systemd[1]: run.service: Main process exited, code=exited, status=2/INVALIDARGUMENT
апр 30 15:38:13 VirtualBox systemd[1]: run.service: Failed with result 'exit-code'.
« Последнее редактирование: 30 Апрель 2019, 15:43:41 от sasha300 »

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2115
  • Lubuntu 16.04 LTS
    • Просмотр профиля
Ну cron не нужен, мне не нужно систематический перезапуск. Включил/перезапустил сервак - запустился скрипт. Тут, как понимаю, только при перезагрузке будет срабатывать, что не айс.

Или Вы не понимаете как оно работает, или я не понимаю что Вам нужно.
Команда в /etc/crontab, которая начинается с @reboot срабатывает при загрузке/перезагрузке компьютера.
Что по Вашему "систематический перезапуск" мне не понятно.

ЧЯДНТ?

Юнит называется run.service, поэтому команды:

sudo  systemctl enable  run.service
sudo  systemctl start  run.service


Теперь нужно смотреть внутрь файла:

/home/sas/leanote/bin/run.sh
И исправь юнит:

[Unit]
Description=Start Run service
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/home/sas/leanote/bin/run.sh

[Install]
WantedBy=multi-user.target
« Последнее редактирование: 30 Апрель 2019, 16:08:47 от ecc83 »

Оффлайн sasha300

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
  • Xubuntu 18.04
    • Просмотр профиля
Или Вы не понимаете как оно работает, или я не понимаю что Вам нужно.
Команда в /etc/crontab, которая начинается с @reboot срабатывает при загрузке/перезагрузке компьютера.
Что по Вашему "систематический перезапуск" мне не понятно.
Сорри, я не бум бум в crontab, поэтому не правильно озвучил сделанный мною вывод.
Юнит называется run.service, поэтому команды:
Ок, сделал так:
sudo systemctl enable run.serviceперезагрузк и не могу зайти в Leanote  =(
Если делаю так:
systemctl start run.serviceто сервис стартует и зайти удаленно в приложение могу.
Теперь нужно смотреть внутрь файла:
Вот содержимое файла /home/sas/leanote/bin/run.sh:
#!/bin/sh
SCRIPTPATH=$(cd "$(dirname "$0")"; pwd)

# set link

path="$SCRIPTPATH/src/github.com/leanote"
if [ ! -d "$path" ]; then
mkdir -p "$path"
fi
rm -rf $SCRIPTPATH/src/github.com/leanote/leanote # 先删除
ln -s ../../../../ $SCRIPTPATH/src/github.com/leanote/leanote

# set GOPATH
export GOPATH=$SCRIPTPATH

script="$SCRIPTPATH/leanote-linux-amd64"
chmod 777 $script
$script -importPath github.com/leanote/leanote

Т.е. замечу, что с sudo, что без него в ручном режиме сервис файл успешно стартует. Но при выполнении команды
systemctl enable run.serviceи дальнейшей перезагрузки Лианоте не стартует =(

И кстати, если набираю:
systemctl enable runт.е. я вместо run.service пишу просто run - юнит запускается.

Дополню: если набираю
systemctl start run.serviceто заправшивает идентификацию пользователя, требуя пароль. Может в этом трабл?
« Последнее редактирование: 30 Апрель 2019, 16:25:53 от sasha300 »

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2115
  • Lubuntu 16.04 LTS
    • Просмотр профиля
Вы создаёте себе путаницу. У вас скрипт именуется 'run' и сервис тоже 'run'.

Измените название скрипта в /home/sas/leanote/bin/run.sh на какое нибудь другое.
Измените внутренности юнита, я выше указал какие.

Команда для размещения юнита в автозагрузке:

sudo systemctl enable run.service
но при этом сервис будет запущен только при перезагрузке компа.

Для того, что бы сервис стартонул вот ПРЯМО СЕЙЧАС команда выглядит:

sudo systemctl start run.service
Перезапуск уже запущенного сервиса:

sudo systemctl restart run.service
« Последнее редактирование: 30 Апрель 2019, 16:30:32 от ecc83 »

Оффлайн ALiEN175

  • Модератор форума
  • Старожил
  • *
  • Сообщений: 4709
  • Capture the truth
    • Просмотр профиля
leanote-server ж сеть нужна? Если да:
[Unit]
Description=Start Run service
Wants=network-online.target
After=network.target network-online.target

(Нажмите, чтобы показать/скрыть)
ASUS P5K-C :: Intel Xeon E5450 :: 8 GB RAM :: Nvidia 8500GT :: XFCE
SAMSUNG N150 :: Intel Atom N450 :: 2 GB RAM :: Intel GMA3150 :: XFCE

Оффлайн sasha300

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
  • Xubuntu 18.04
    • Просмотр профиля
Беру паузу. VirtualBox опять вызвал BSOD, установлю VMWare, настрою все также как на боевом серваке и продолжу эксперимент.
p.s.: ecc83 за советы отдельное спасибо!

Оффлайн sasha300

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
  • Xubuntu 18.04
    • Просмотр профиля
Спасибо! Юнит успешно запустил run.sh, но во время тестового запуска юнита терминал что-то от меня ожидал. Теперь по порядку:
Вы создаёте себе путаницу. У вас скрипт именуется 'run' и сервис тоже 'run'.
делаю все заново, но сначала проверю, работает ли сам Leanote:
bash /home/sas/leanote/bin/run.shчерез браузер захожу на Leanote, все норм. Через htop убиваю процесс и приступаю к автозагрузке.
sudo touch /etc/systemd/system/leanote.service
sudo chmod 664 /etc/systemd/system/leanote.service
sudo nano /etc/systemd/system/leanote.service
вставляю ваш код:
[Unit]
Description=Start Run service
After=multi-user.target

[Service]
Type=oneshot
ExecStart=/home/sas/leanote/bin/run.sh

[Install]
WantedBy=multi-user.target
делаю run.sh исполняемым:
chmod +x /home/sas/leanote/bin/run.shперезапускаю systemctl:
sudo systemctl daemon-reloadПроверяю, что сервис успешно подтягивает скрипт:
sudo systemctl start leanote.service=> ВОТ ТУТ ТРАБЛ! в терминале ожидается какая-то команда, так как мигает только курсор, имени_пользователя@имя_машины нет. Сам Leanote заработал. В терминале нажимаю Ctrl+C - Leanote опять работает.
Теперь заношу сервис в автозагрузку:
sudo systemctl enable leanote.serviceну и самое интересное, sudo reboot и Leanote загрузился!

Вопрос: что было с терминалом, чего он ждал?


Пользователь добавил сообщение 01 Май 2019, 22:41:00:
Решил проверить на другой машине и снова какое-то ожидание:

Чего ждет - не понятно..
« Последнее редактирование: 01 Май 2019, 22:41:00 от sasha300 »

Оффлайн Azure

  • СуперМодератор
  • Старожил
  • *
  • Сообщений: 6017
  • Windows10, i3wm on Debian9, Manjaro20.0
    • Просмотр профиля
При запуске из Терминала любой команды/процесса, Терминал "ждет" его завершения. Насколько я понял сервис Leanote - постоянно работающий, поэтому и возникает ситуация описанная Вами.
P.S. Стоит хоть немного изучить как работают процессы в Линукс чтоб не задавать "детские" вопросы
В Линукс можно сделать ВСЁ что угодно, достаточно знать КАК !

Оффлайн ecc83

  • Старожил
  • *
  • Сообщений: 2115
  • Lubuntu 16.04 LTS
    • Просмотр профиля
Чего ждет - не понятно..


Выше объяснили в чем дело. Я со своей стороны сделал всё, что мог.
Вероятно я плохой "педагог", потому что быстро устаю от подобных вопросов.

Оффлайн sasha300

  • Автор темы
  • Новичок
  • *
  • Сообщений: 14
  • Xubuntu 18.04
    • Просмотр профиля
Спасибо за разъяснения, все вопросы разобраны!
Тему пометил как решенную

 

Страница сгенерирована за 0.103 секунд. Запросов: 23.