Вопрос или проблема
Я создал простой bash-скрипт под названием echo.sh. Он выводит строку. Я убедился, что он исполняемый. Затем я добавил его в программу “автозапуска” через графический интерфейс. Однако когда я перезагружаю свою машину, похоже, что он не был выполнен, так как никакого вывода в терминале нет.
Насколько я понимаю, разве скрипт не должен автоматически открывать терминал при выполнении, поскольку STDOUT является файлом терминала? Однако скрипт работает нормально, если я запускаю его сам из терминала.
echo.sh
#!/bin/bash
echo "hello this is a bash script talking"
Сделать его исполняемым
chmod +x echo.sh
Добавление в “автозапуск” с правильным каталогом к файлу
Результат
Однако когда я перезагружаю систему, скрипт не выполняется как ожидалось, и терминал не появляется с сообщением echo. Я не уверен, почему так, и мог бы совершенно не понять сути, если это так, пожалуйста, дайте мне знать.
Просто чтобы отметить, все мои другие bash-скрипты работают, такие как скрипт “cleanup.sh”, который также находится в программе “автозапуск”.
Попытки исправления
Я пытался перенаправить STDOUT в файл терминала /dev/tty. Однако это, похоже, не сработало.
#!/bin/bash
echo "hello this is a bash script talking" >/dev/tty
Я также протестировал bash-скрипт с простой командой rm, чтобы проверить, только ли команда echo создает проблему. Однако, когда он добавляется в автозапуск или .bashrc файл, он не удаляет test.txt в том же каталоге, что и скрипт. Однако работает, когда я выполняю его вручную из терминала.
#!/bin/bash
rm ./test.txt
Я также протестировал программу автозапуска, просто открыв Firefox, с командой Firefox. Это работает без проблем. Так что, похоже, нет проблем с программой автозапуска?
Скрипт, вероятно, работает, но STDOUT скрипта (куда бы ни был направлен вывод) подключен к процессу в вашей ОС, который отвечает за запуск таких скриптов, который не выполняется в терминале, но является скрытым процессом пользователя, например, в ядре. Чтобы открыть терминал с этим сообщением, вы, вероятно, должны изменить его на
#!/bin/bash
gnome-terminal -e 'echo "hello this is a bash script talking"'
(Я сейчас не на Ubuntu, так что не могу это протестировать, но суть в том, чтобы явно открыть терминал, где вы хотите, чтобы это сообщение появилось)
Вы можете проверить конфигурационный файл автозагрузки, который вы создали, с помощью
cat ~/.config/autostart/NAME.desktop
Если вы хотите выполнить свой скрипт в терминале, вы должны добавить
Terminal=true
в файл.
Вы также можете установить Hidden=false
в зависимости от того, что вы хотите достичь.
Самый простой метод — использовать crontab следующим образом;
crontab -e
Добавьте свой скрипт в конец файла crontab
#
@reboot /path-to-your-script/your-script-name.sh
Затем перезагрузите, чтобы увидеть изменения
Вы должны добавить /bin/bash -c
перед вашим '/path/to/your/script.sh'
/bin/bash -c '/path/to/your/script.sh'
Вывод команды echo
будет виден в ваших системных журналах, а не в вашем терминале.
journalctl -b
покажет вам вывод журналов загрузки системы, когда выполняется ваш скрипт.
Ответ или решение
Скрипт Bash не запускается при старте системы: возможные причины и решения
Если ваш скрипт echo.sh
, который выводит строку, не запускается автоматически при загрузке системы, это может быть связано с несколькими причинами. Ниже представлены возможные причины проблемы и способы их решения.
Проблема с выводом в терминал
Когда вы добавляете свой скрипт в "Программы запуска" через графический интерфейс, он запускается, но не в терминале, что объясняет отсутствие видимого вывода. Обычно, когда воплощаете запуск скрипта, он выполняется в скрытом процессе, не связанном с вашим терминалом.
Решения
-
Запуск в терминале:
Чтобы выводить сообщения вашего скрипта в терминал, вам необходимо явно указать, что скрипт должен выполняться в терминале. Вы можете изменить ваш скрипт следующим образом:#!/bin/bash gnome-terminal -e 'bash -c "echo \"hello this is a bash script talking\"; exec bash"'
Этот код откроет новый терминал и выполнит ваш скрипт, а затем оставит терминал открытым, чтобы вы могли увидеть вывод.
-
Настройка файла автозапуска:
Если вы создаете файл автозапуска (например,my_script.desktop
в~/.config/autostart/
), добавьте следующие строки:[Desktop Entry] Type=Application Exec=/path/to/your/echo.sh Terminal=true Hidden=false
Убедитесь, что путь к вашему скрипту указан правильно. Добавление
Terminal=true
заставит систему запускать ваш скрипт в терминале. -
Использование crontab:
Альтернативный способ — использование cron для автоматического запуска скрипта при загрузке. Выполните следующую команду в терминале:crontab -e
И добавьте строку:
@reboot /path/to/your/echo.sh
Это обеспечит выполнение вашего скрипта при перезагрузке системы.
-
Запуск через системные логи:
Если вы хотите видеть вывод скрипта в системных логах (например, если это не обязательно выводить в терминале), вы можете перенаправить вывод вашего скрипта в системный лог:#!/bin/bash echo "hello this is a bash script talking" >> /var/log/my_script.log
Вы будете в состоянии видеть вывод с помощью команды:
journalctl -b
Программные ошибки
Если вы уверены, что скрипт работает корректно, но при этом он не выполняется, убедитесь, что:
- Скрипт имеет разрешения на исполнение (вы можете удостовериться в этом, используя
chmod +x echo.sh
). - Путь к скрипту указан правильно в настройках автозапуска или в crontab.
Проверка обновления системы
Также стоит убедиться, что у вас установлены все последние обновления, что может устранить некоторые возможные баги, влияющие на запуск скриптов.
Заключение
Вышеуказанные подходы должны помочь вам устранить проблему с выполнением вашего скрипта при запуске системы. Обязательно проверьте настройки и убедитесь, что все пути указаны правильно. С помощью предложенных решений вы сможете оптимально настроить автоматический запуск вашего Bash-скрипта.