- Почему не запускается скрипт, ошибка «bash: ./….sh: Отказано в доступе» (РЕШЕНО)
- Почему возникает ошибка «bash: ./….sh: Отказано в доступе»
- Не запускаются файлы .sh
- Запуск скрипта sh в Linux
- Как работают скрипты
- Запуск скрипта sh в Linux
- Выводы
- Почему не запускается cron скрипт?
- В Linux Mint 14 запуск скрипта из Startup Applications не работает, но из терминала работает
- 2 ответа 2
Почему не запускается скрипт, ошибка «bash: ./….sh: Отказано в доступе» (РЕШЕНО)
Иногда при запуске .sh файла, который представляет собой Bash скрипт, может возникнуть ошибка. К примеру, запускается скрипт в файле check-aur.sh:
Подобную ошибку можно исправить, если перед запускаемым скриптом указать желаемый интерпретатор, то есть bash:
Почему возникает ошибка «bash: ./….sh: Отказано в доступе»
Вы могли заметить, что некоторые файлы можно запустить и без указания bash в начале команды. Для этого необходимо соблюдение двух условий:
- в разрешения файла должно быть разрешение на выполнение
- в самом файле вверху должен быть шебанг
Проверить, есть ли разрешения на исполнение файла можно командой ls:
Должно быть что-то вроде такого (должны быть x):
Чтобы установить права на выполнение файла выполните команду вида:
Ещё одна возможная причина, в начале файла *.sh пропущен шебанг:
Строка шебанга имеет следующий формат:
interpreter должен быть абсолютным путём к исполняемому файлу программы (если интерпретатором является скрипт, он тоже должен начинаться с шебанга). Необязательный optional-arg должен иметь формат единственного аргумента (по причинам переносимости он не должен содержать пробелы). Пробел после #! является опциональным.
Источник
Не запускаются файлы .sh
Ubuntu Gnome 16.04.1 x86-64. Собственно, проблема. Поставил в наутилусе настройку чтобы спрашивал открыть текст или запустить, запускаю — ноль реакции. На Линукс минт циннамоне работало изначально, тут нет. Как можно решить?
А что в файле? Какой вывод ls -la?
ls -la показывает, что всё root. Хочу уточнить, что не работает не один файл, а все .sh, что я пробовал
а почему всё рут? из терминала работает вообще? Под каким юзером запускаешь? и +х есть?
Ну раз все root — значит, все заrootись! 🙂
А права на файл какие все же?
У него все рут, в этом случае обычный пользун ничего не сможет сделать с этим файлом, кроме как прочитать.
Тогда зарутиться и заюзать chown и можно применять chmod.
Вопрос только в том, есть ли у него доступ к руту.
Если это скрипт из какого-то системного пакета — то так лучше не делать. Хотя, кто его знает, инфы то нет 🙂
Как вариант — запусти скрипт из консоли и посмотри, что пишет. Авось, запускаемой программе зависимостей не хватает.
Согласен, всё зависит от конкретной ситуации.
Да, дейстительно, пишет что не хватает какой-то библиотеки. Сейчас попробую установить
Источник
Запуск скрипта sh в Linux
Вся сила Linux в использовании терминала. Это такая командная оболочка, где вы можете выполнять различные команды, которые будут быстро и эффективно выполнять различные действия. Ну впрочем, вы наверное это уже знаете. Для Linux было создано множество скриптов, которые выполняются в различных командных оболочках. Это очень удобно, вы просто объединяете несколько команд, которые выполняют определенное действие, а затем выполняете их одной командой или даже с помощью ярлыка.
Но у новичков может возникнуть вопрос — как запустить скрипт в Linux, что для этого нужно сделать, что будет происходить и какие команды нужно выполнить. Но сначала нужно рассмотреть как работают скрипты и что такое исполняемость.
Как работают скрипты
В Linux почти не используется расширение файла для опережения его типа на системном уровне. Это могут делать файловые менеджеры и то не всегда. Вместо этого, используются сигнатуры начала файла и специальные флаги. Система считает исполняемыми только те файлы, которым присвоен атрибут исполняемости.
Теперь о том, как работают скрипты. Это обычные файлы, которые содержат текст. Но если для них установлен атрибут исполняемости, то для их открытия используется специальная программа — интерпретатор, например, оболочка bash. А уже интерпретатор читает последовательно строку за строкой и выполняет все команды, которые содержатся в файле. У нас есть несколько способов выполнить запуск скрипта linux. Мы можем запустить его как любую другую программу через терминал или же запустить оболочку и сообщить ей какой файл нужно выполнять. В этом случае не нужно даже флага исполняемости.
Запуск скрипта sh в Linux
Сначала рассмотрим пример небольшого sh скрипта:
#!/bin/bash
echo «Hello world»
Вторая строка — это действие, которое выполняет скрипт, но нас больше всего интересует первая — это оболочка, с помощью которого его нужно выполнить. Это может быть не только /bin/bash, но и /bin/sh, и даже /usr/bin/python или /usr/bin/php. Также часто встречается ситуация, что путь к исполняемому файлу оболочки получают с помощью утилиты env: /usr/bin/env php и так далее. Чтобы выполнить скрипт в указанной оболочке, нужно установить для него флаг исполняемости:
chmod ugo+x script.sh
Мы разрешаем выполнять запуск sh linux всем категориям пользователей — владельцу, группе файла и остальным. Следующий важный момент — это то место где находится скрипт, если вы просто наберете script.sh, то поиск будет выполнен только глобально, в каталогах, которые записаны в переменную PATH и даже если вы находитесь сейчас в той папке где находится скрипт, то он не будет найден. К нему нужно указывать полный путь, например, для той же текущей папки. Запуск скрипта sh в linux:
Или полный путь от корня:
Если вы не хотите писать полный путь к скрипту, это можно сделать, достаточно переместить скрипт в одну из папок, которые указаны в переменной PATH. Одна из них, которая предназначена для ручной установки программ — /usr/local/bin.
cp script.sh /usr/local/bin/script.sh
Теперь вы можете выполнить:
Это был первый способ вызвать скрипт, но есть еще один — мы можем запустить оболочку и сразу же передать ей скрипт, который нужно выполнить. Вы могли редко видеть такой способ с bash, но он довольно часто используется для скриптов php или python. Запустим так наш скрипт:
А если нам нужно запустить скрипт на php, то выполните:
Вот так все просто здесь работает. Так можно запустить скрипт как фоновый процесс, используйте символ &:
Даже запустить процесс linux не так сложно.
Выводы
Как видите, запуск скрипта sh в linux — это довольно простая задача, даже если вы еще плохо знакомы с терминалом. Существует действительно много скриптов и некоторые из них вам возможно придется выполнять. Если у вас остались вопросы, спрашивайте в комментариях!
Источник
Почему не запускается cron скрипт?
Помогите неопытному. Операционная система CentOS 6.3. Пытаюсь настроить бэкап папки и базы данных через rsync. Скрипты через консоль запускаются нормально, все работает, крон ошибок при сохранении не выдает, просто пишет «installing new crontab». Если я все правильно понимаю, то вроде все правильно. Но почему-то ничего не работает. Права на папку где лежат скрипты 777.
Я уже по всякому попробовал и /bin/bash в crontab убирал, поскольку как я прочитал, если в начале скрипта стоит #!/bin/bash , то это не нужно.
- Вопрос задан более трёх лет назад
- 41425 просмотров
Все нашел ответ на свой вопрос:
1) Кронтаб нужно запускать так: sudo crontab -e — это нужно чтобы cron запускал скрипты из под root.
2) Инструкции для cron должны быть такими. Нужно обязательно писать bash перед указанием пути к скрипту. После указания пути к скрипту дописать >/dev/null 2>&1
Пример:
3) Сами скрипты действительно должны быть лишены sudo, так как и так запускаются из под пользователя root.
Пример:
Можете объяснить что значит: >/dev/null 2>&1
У меня прописано сейчас вот так:
00 16,18,20,22 * * * garanty /home/garanty/www/garancy.finexpert.pro/ftpset.sh 2>/home/garanty/www/garancy.finexpert.pro/tmp/logscron.txt
Не запускается, хотя в логах пишет, что все нормально.
2>/home/garanty/www/garancy.finexpert.pro/tmp/logscron.txt — эта штука должна записывать в файл logscron.txt ошибки если они будут?
> Можете объяснить что значит: >/dev/null 2>&1
stdout — в /dev/null, stderr — туда же, куда stdout
Источник
В Linux Mint 14 запуск скрипта из Startup Applications не работает, но из терминала работает
Я создал скрипт для настройки планшета Intuos в начале сеанса:
который я сохранил как
/bin/.wacomsetup.sh запустив chmod a+x
/bin/.wacomsetup.sh . Проверка свойств показывает, что это разрешено запускать как программу, но моя учетная запись пользователя может только чтение / запись в файл.
Я подтвердил, что он работает, когда я запускаю его из терминала, используя sh
/bin/.wacomsetup.sh , но когда я указываю путь в качестве записи команды в новой записи в Startup Applications (это относится к Cinnamon?), Он не запускает скрипт после входа в систему / перезапуска (я должен запустить его вручную).
Изменить программу запуска:
Название: Setup Wacom Intuos
Команда: sh
/bin/.wacomsetup.sh
Комментарий: ksdfk
Существуют ли другие разрешения, которые необходимо применить к сценарию, чтобы он мог запускаться при запуске таким образом?
Спасибо
(Я был бы признателен, если бы кто-то мог пометить этот вопрос более подходящим образом, если есть лучшие теги.)
2 ответа 2
Несколько вещей, чтобы попробовать:
» в пути в Startup Applications абсолютным путем к вашей домашней папке (например, /home/whateveryourusernameis )
Удалите sh в пути, поскольку это не необходимо; до тех пор, пока скрипт является исполняемым (с битом «x», установленным в DACL для вас), символ #!/bin/sh в начале сценария обнаружит, что это сценарий оболочки, и автоматически запустит интерпретатор оболочки для выполнения команд.
Попробуйте переместить сценарий в /usr/bin что делает его мир для чтения и выполнения, а также настройки Command: в приложениях Startup просто wacomsetup.sh Хотя я сомневаюсь, что этот шаг необходим, потому что запускаемые приложения запускаются под вашей учетной записью после входа в систему, и Xorg уже должен быть запущен .
Просто чтобы убедиться, что проблема не в том, что скрипт выполняется, а команды по каким-то причинам не выполняются: вверху скрипта под #!/bin/sh line, попробуйте добавить: echo scripted >
/scripted (измените часть «scripted», если у вас уже есть файл с таким именем для какого-либо другого использования). Затем убедитесь, что файл не существует, затем выйдите из системы / войдите в систему и посмотрите, пишет ли он этот файл. Если нет, скрипт даже не запускается. Если вы действительно видите этот файл, значит, скрипт выполняется, но вызовы xsetwacom не выполняются.
Источник