Создание и запуск скрипта. Выполнение скриптов, не завершающих работу при закрытии терминала. Остановка выполняемого скрипта

Скрипт командной оболочки представляет собой последовательность команд, которую вы можете использовать многократно. Исполнение этой последовательности, как правило, осуществляется с помощью ввода в командной строке имени скрипта. Кроме того, с помощью cron вы можете использовать скрипты для автоматизации выполнения задач. Другое применение скриптов - процедура загрузки и остановки системы UNIX, когда в скриптах init определяются операции с демонами и сервисами.

Чтобы создать скрипт командной оболочки, откройте в вашем редакторе новый пустой файл. Для этого можно использовать любой текстовый редактор: vim , emacs , gedit , dtpad и т. д.; подойдет любой. Однако, вы можете выбрать более продвинутый редактор, такой как vim или emacs , поскольку такие редакторы можно настроить на распознавание синтаксиса командной оболочки и Bash и они могут оказаться хорошим подспорьем по предотвращению таких ошибок, которые часто делают новички, например, забывают закрывать скобки и ставить точки с запятой.

Набирайте команды UNIX в новом пустом файле точно также, как если бы вы вводили их в командной строке. Как уже говорилось в предыдущей главе (смотрите раздел "Выполнение команды"), команды могут быть функциями командной оболочки, встроенными командами, командами UNIX или другими скриптами.

Выберите для вашего скрипта мнемоничное имя, которое бы говорило, что скрипт делает. Убедитесь, что имя вашего скрипта не конфликтует с существующими командами. Чтобы не возникало никакой путаницы, имена скриптов часто заканчиваются расширением.sh. Тем не менее, в вашей системе могут существовать и другие скрипты с тем же именем, которое вы выбрали. С помощью команд which , whereis и других поищите информацию об уже существующих программах и файлах в таким именем:

Which -a script_name whereis script_name locate script_name (прим.пер. : вместо script_name укажите имя своего скрипта ).

Скрипт script1.sh

В этом примере мы используем команду echo , встроенную в Bash, которая перед тем, как будут выданы выходные данные, проинформирует пользователя о том, что должно быть сделано. Настоятельно рекомендуется информировать пользователей о том, что делает скрипт с тем, чтобы пользователи не нервничали в случае, если им покажется, что скрипт ничего не делает . Мы вернемся к теме оповещения пользователей в главе 8 "Пишем интерактивный скрипт".


Рис.2.1. Скрипт script1.sh

Напишите такой же скрипт для себя. Хорошей идеей было бы создать директорий ~/scripts , в котором будут находиться ваши скрипты. Добавьте этот директорий к содержимому переменной PATH:

Export PATH="$PATH:~/scripts"

Если вы только знакомитесь с Bash, используйте текстовый редактор, в котором для различных конструкций оболочки используются различные цвета. Подсветка синтаксиса поддерживается в vim , gvim , (x)emacs , kwrite и во многих других редакторах, смотрите документацию к вашему любимому редактору.

Выполнение скрипта

Для того, чтобы скрипт можно было запускать, он должен для соответствующих пользователей иметь права на запуск. После того, как вы установите права доступа, проверьте, что вы действительно установили те права, которые вам нужны. Когда это будет сделано, скрипт можно будет запускать точно также, как и любую другую команду:

Willy:~/scripts> chmod u+x script1.sh willy:~/scripts> ls -l script1.sh -rwxrw-r-- 1 willy willy 456 Dec 24 17:11 script1.sh willy:~> script1.sh The script starts now. Hi, willy! I will now fetch you a list of connected users: 3:38pm up 18 days, 5:37, 4 users, load average: 0.12, 0.22, 0.15 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root tty2 - Sat 2pm 4:25m 0.24s 0.05s -bash willy:0 - Sat 2pm ? 0.00s ? - willy pts/3 - Sat 2pm 3:33m 36.39s 36.39s BitchX willy ir willy pts/2 - Sat 2pm 3:33m 0.13s 0.06s /usr/bin/screen I"m setting two variables now. This is a string: black And this is a number: 9 I"m giving you back your prompt now. willy:~/scripts> echo $COLOUR willy:~/scripts> echo $VALUE willy:~/scripts>

Это наиболее обычный способ выполнить скрипт. Предпочтительно выполнять скрипты, подобные этому, в подоболочке. Переменные, функции и псевдонимы, создаваемые в этой подоболочке, известны только в этой конкретной сессии bash в этой подоболочке. Когда происходит выход из этой оболочки и управление получает родительская оболочка, все настройки очищаются и будут забыты все изменения, которые были сделаны с помощью скрипта в состоянии этой оболочки.

Если вы в переменной PATH не указали директорий scripts или. (текущий каталог), вы можете активировать скрипт следующим образом:

./script_name.sh

Также можно выполнить скрипт внутри имеющейся оболочки, но это обычно делается только в случае, если вы хотите получить специальные возможности, например, если нужно проверить, работает ли скрипт с другой оболочкой, или выдать трассировку с целью отладки (прим.пер. - вместо script_name укажите имя своего скрипта):

Rbash script_name.sh sh script_name.sh bash -x script_name.sh

Указанная командная оболочка будет запущена как подоболочка вашей текущей оболочки и выполнит скрипт. Это делается, когда вы хотите, чтобы скрипт был запущен с конкретными параметрами или при определенных условиях, которые не указаны в самом скрипте.

Если вы не хотите запускать новую командную оболочку, а хотите выполнить скрипт в текущей оболочке, используйте команду source:

Source script_name.sh

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

Willy:~/scripts> source script1.sh --output ommitted-- willy:~/scripts> echo $VALUE 9 willy:~/scripts>

1. Написание скрипта

Скрипт PowerShell (не важно какой версии) - это текстовый файл с расширением *.ps1 .

Вот пример простого Power Shell срипта (файл systemInfo.ps1 ):

# Retrieve WMI object for the operating system

Get-WmiObject Win32_OperatingSystem

Этот файл можно создавать и редактировать, например, в FAR Manager.

Обратите внимание , что FAR Manager хоть и может работать в консоли Power Shell, но выполняет из-под себя скрипты в окружении обычной Windows-консоли cmd . То есть, FAR Manager можно использовать только для создания и редактирования PowerShell скриптов, но не для запуска. Но прежде чем разочаровываться, прочитайте пункт 3.

2. Запуск срипта

Скрипт нужно выполнять из консоли Power Shell, а не из обычной консоли Windows. В консоли Power Shell необходимо перейти в каталог, где лежит скрипт (командами cd ), и затем запустить сам скрипт, обязательно прописав перед ним символы ".\" . Например, имеем путь к файлу скрипта d:\work\systemInfo.ps1 . Тогда команды запуска будут выглядеть так:

cd \

cd work

.\systemInfo.ps1

или так (просто указывается полный путь к скрипту):

d:\work\systemInfo.ps1

Скорее всего, при запуске скрипта появится следующая ошибка:

Не удается загрузить файл D:\work\systemInfo.ps1, так как выполнение скриптов запрещено для данной системы. Введите "get-help about_signing" для получения дополнительных сведений.

строка:1 знак: 18

CategoryInfo: NotSpecified: (:) , PSSecurityException

FullyQualifiedErrorId: RuntimeException

Ошибка появляется из-за того, что по-умолчанию в Power Shell включена максимальная политика безопасности, которая позволяет выполнять команды PowerShell в командной строке, но не позволяет в той же командной строке выполнить скрипт с командами PowerShell.

Чтобы резрешить выполнение PowerShell скриптов, нужно создать *.bat файл, например enableScript.bat со следующим содержимым:

powershell -Command Set-ExecutionPolicy RemoteSigned

Этот *.bat файл можно выполнить в любой консоли: хоть в PowerShell, хоть в обычной cmd . После выполнения этого файла, PowerShell-скрипты станут запускаться в консоли PowerShell.

3. Запуск PowerShell-скрипта из обычной Windows-консоли cmd

Скрипт PowerShell можно выполнить и из обычной консоли Windows. Для этого можно воспользоваться командой:

Powershell -File ./systemInfo.ps1

Таким образом можно выполнять скрипты прямо из FAR Manager, и они будут работать.

Но тут есть небольшая тонкость. Параметр -File срабатывает только на локальных путях, даже если путь указан относительный "./" . То есть, если *.ps1 - файл лежит на локальном диске C: или D: , то такой вызов будет работать. Но если попробовать выполнить скрипт, расположенный на доменном ресурсе, то скрипт не будет найден. Возможно, это исправят в следующих версиях PowerShell.

Часто продвинутые пользователи и даже администраторы, установив свежую операционную систему, настроя всевозможные файрволы, думают, что сейчас система надежно защищена, и можно расслабиться на спинке кресла. Но, при написании скриптов для этих свежих операционных систем, необходимо их правильно запускать. Затрагивая тему скриптов, ответим на часто задаваемые вопросы по их запуску.

Чисто теоретически, как запустить скрипт в windows на MS JScript (MyScript.js) как службу Windows? Если, например, создаем раздел в реестре и в ветке. HKЕY_LОCАL_MАСHINЕ\SYSTЕM\СurrеntСоntrоlSеt\sеrvicеs\MySеrvicе создать все требуемые параметры, необходимо будет прописать через cmd CScript в этих параметрах запуск или через двойной запуск на подобии: "C:\Windows\System32\WScript.exe" или как-нибудь проще. Получится что-то на подобии скрытого режима, а в Taskmanager не будет явно просматриваться процесс wscript.exe.

Часто, при написании JavaScript’а, возникает потребность в том, чтобы автоматически сделать загрузку. А как запустить скрипт при загрузке?

  • в конце js-файла сделать вызов необходимой функции.
  • в тексте файла menu.js прописать функцию page_load():

Использование сразу двух способов одновременно очень усложнит сопровождение и понимание кода.

  • shell script – набор команд системы, записанный в простом текстовом файле. Здесь ничего особо сложного нет, всего лишь команды, которые можно с легкостью ввести в командную строку системной оболочки или в терминал. В дальнейшем произведется запуск скрипта без осложнений.
  • Если нужно запустить vbs-скрипт и, если изменения не вносились в обработчик с расширением «.vbs», то после двойного нажатия по файлу с данным расширением, скрипт будет запущен. Всё должно заработать сразу же. Однако из графоболочки командная строка не будет просто так запускать vbs, для этого требуется использовать интерпретатор cscript
  • Для того, чтобы запустить sql скрипт, используя C#, необходимо подключить SMO сборку и определить SеrvеrСоnnеction.EхесutеNоnQuеry (String scriрt). Способ EхеcutеNоnQuеry() воспринимает только параметр строки, поэтому вначале нужно прочесть.sql файл в строковой переменной. SеrvеrConnеction.ExеcutеNonQuеry() делает запрос, который не будет возвращать результирующий набор данных.
  • Для того чтобы выполнить скрипт python необходимо передать интерпретатору название скрипта. Сначала пишем в первой строчке: syntах еrrоr. Далее пишем без «$» - syntаx еrrоr. Это просто имя файла - syntах еrrоr. И последним, что необходимо будет прописать, является путь к файлу - syntаx еrrоr.
  • Теперь, как запустить php скрипт через Dеnwеr. Большая часть новичков постоянно делают одну ошибку. Вроде бы абсолютно всё делается правильно, создаются нужные папки, перезапускается Dеnwеr и, вроде бы, в конце осталось только безошибочно вызвать файл в действие. Но тут опять появляется назойливая ошибка. Пользователь вновь открывает файл просто в обыкновенном браузере (либо перетаскиванием с копированием файла в браузер, либо двойным нажатием клавиши мыши). Эти действия легко возможно заметить по названию адреса в адресной строке. При таких действиях там будет прописано что-то наподобие: filе://Z:\hоmе\mysitе.lоcаl\www\sсriрt.рhр. Но правильно будет запускать ваш скрипт, если ввести в адрес виртуального хоста. Непосредственно в адресную строку браузера необходимо ввести: httр://mysitе.lосаl/sсriрt.рhр. После такого метода ввода скрипт без проблем запустится и выведет свой правильный результат, который и должен выводить.

С этой статьей вы не научитесь программировать и даже не напишите как таковую программу, но найдете здесь отличные VBS скрипты и BAT файлы, которые без проблем напишете в обычном блокноте Windows, сможете усовершенствовать по своему, потом похвастаться перед друзьями и близкими. Возможно это поднимет вам настроение и вы отлично проведете время.

Большинство похожих скриптов пишутся для удобства и автоматизации каких-либо действий на компьютере с ОС Windows. Представленные же ниже скрипты мало окажутся полезными (может мне так кажется), но они отлично подойдут для первоначального знакомства с "кодингом". Вы отлично проведете время, удивив как себя, так и знакомых чайников (не программистов), плюс это еще один хороший вариант .

Немного терминологии:

  • VBS - язык программирования для создания скриптов в ОС Windows, создается/редактируется в Блокноте Windows, имеет разрешение ".vbs". Думаю, продолжать не имеет смысла, ибо это мало о чем скажет, особенно новичкам. Интересующимся - .
  • BAT - пакетный файл, в народе просто "батник". Расширение файла ".bat". Дальше аналогично - .

Данных расширений (vbs, bat) файлы создаются во всеми известном Блокноте Windows (Notepad). Для большего удобства создания скриптов рекомендуется использовать усовершенствованный (скажем так) блокнот - Notepad++. Он удобен подсветкой синтаксиса большого количества языков программирования, если вам это мало о чем говорит, то скачайте и пишите в нем - ошибок сделаете меньше в коде, ну или будет их проще найти, чем в том же мало функциональном Блокноте Windows.

Для наглядности пример (слева - Блокнот Windows, справа - Notepad++):

Приступим

Если вы уже знакомы с VBS скриптами и батниками, то скорее всего нижеследующие примеры вам будут неинтересны, если же вы новичок, то для первоначального ознакомления - то, что нужно.

Научим компьютер здороваться

  1. Открываем Блокнот (или Notepad Plus Plus).
  2. Копируем в вставляем код:

    Set sapi=CreateObject("sapi.spvoice")
    sapi.Speak "Hello!"

  3. Обязательное условие: кавычки должны быть “такими”, «ёлочки» не подойдут, скрипт не будет обрабатываться и выйдет ошибка. Вместо слова "Hello" можете написать что угодно, даже по русски, при наличии русского голосового движка.
  4. Дальше выбираем Файл - Сохранить как - Тип файла - Все файлы - название.vbs
  5. Называйте файл как хотите, но не забудьте в конце прописать расширение - .vbs (пример - Privet.vbs).
  6. Теперь пробуйте проверить свой скрипт - запустите файл двойным щелчок мыши.

Один нюанс: если вы прописали в кавычках слова русскими буквами, а при запуске произносится непонятно что, то у вас просто не установлен русский голосовой движок. Подробная установка и настройка голосового движка выходит за рамки нашей статьи, поэтому более подробно ознакомьтесь и вновь возвращайтесь сюда.

Теперь, сделаем следующее: пропишем данный скрипт в автозагрузку, а это означает то, что при запуске компьютера вам будет произнесено написанное в программе слово (слова), если как в примере, то будет говорить - "Hello" при каждом включении компьютера. Как это сделать?

Все просто, программу (скрипт) добавить в автозагрузку можно таким же образом, то есть через такой же VBS скрипт. Создаем файл в блокноте, копируем/вставляем (Ctrl+C/Ctrl+V) следующий код:

Dim vOrg, objArgs, root, key, WshShell
root = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run\"
KeyHP = "Program"
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.RegWrite root+keyHP,"C:\Privet.vbs /autorun"

Изменяем путь до скрипта "говорилки", вот эту строчку - C:\Privet.vbs на свою. Прописываем где у вас лежит этот скрипт и как называется. Дальше сохраняем только что созданную мини программу в блокноте и запускаем. Все, теперь компьютер будет с вами здороваться пр каждом включении.

Открыть дисковод

  1. Открыть блокнот. Скопировать/Вставить следующий код:

    Set a = CreateObject("WMPlayer.OCX.7")
    Set b = a.CdromCollection
    Set c = b.Item(0)
    Set d = c.Eject

  2. Сохранить с расширением.vbs
  3. Запустить скрипт и откроется дисковод.

Есть более интересная модификация данного скрипта:

Set WMPlayer = CreateObject("WMPlayer.OCX.7")
do
WMPlayer.CdRomCollection.Item(0).Eject()
loop

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

Внимание! Второй код (открытие-закрытие дисковода), некоторые антивирусы видят как вредоносную программу. Антивирус Касперского (в т.ч. и ) его видит именно так и уничтожает сразу же. В первом же случае (просто открытие дисковода) для антивирусных программ не является вредоносным скриптом.

Чтобы прекратить автоматически открывать-закрывать дисковод необходимо:

  1. Запустить диспетчер задач ( - Ctrl+Alt+Del).
  2. Перейти на вкладку "Процессы".
  3. Найти процесс wscript.exe - правая кнопка мыши - завершить процесс.

Игра

Интересная находка из Сети - игра на VBS. Необходимо угадать число от 0 до 100. Скрипт автоматически при запуске задает (разгадывает) число, которое вам необходимо угадать и ввести в специальном окошке, при неправильном ответе даются подсказки, например меньше или больше.

Ниже тот самый код который необходимо скопировать и вставить в блокнот, далее сохранить (расширение.vbs).

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

Set y = CreateObject("Scripting.FileSystemObject")
Set y = Nothing
Do
a = 0
u = 0
Randomize
Number = Int((RND*99)+1)
MsgBox "Я загадал число от 1 до 100, попробуй отгадать",64,"Угадайка"
Do
a = a + 1
c = InputBox("Угадай число" & vbCrLf & vbCrLf & "Попытка: " & a & vbCrLf & vbCrLf & "Чтобы посмотреть результаты введите число!" & vbCrLf & vbCrLf & "Для выхода оставьте поле пустым" & vbCrLf & vbCrLf,"Угадайка")
If c = "!" Then CreateObject("WScript.Shell").Run "notepad C:\Windows\Result.dll",3,True: Exit Do
If c <> "" Then
If IsNumeric(c) = True Then
If CInt(c) < Number Then MsgBox "Нет,это не " & c & ". Я загадал число больше",64,"Угадайка"
If CInt(c) > Number Then MsgBox "Нет,это не " & c & ". Я загадал число меньше",64,"Угадайка"
If CInt(c) = Number Then
Set y = CreateObject("Scripting.FileSystemObject")
MsgBox ("Количество попыток: " & a)
If MsgBox ("Правильно, это было число " & c & ". Начать заного?",36,"Угадайка") = 6 Then Exit Do Else WScript.Quit
End If
Else
MsgBox "Это не число!",16,"Угадайка"
a = a - 1
End If
Else
a = a - 1
l = MsgBox ("Ты ничего не ввел. Выйти из программы?",36,"Угадайка")
If l = 6 Then WScript.Quit
End If
Loop
loop

Ну и перед тем как переходить к батникам (.BAT) воспользуемся самым полезным VBS скриптом из всех перечисленных в этой статье.

Скрипт закрывающий wscript.exe

Сам скрипт:

Set TaskKill = CreateObject("WScript.Shell")
TaskKill.Run "TaskKill /f /im wscript.exe"

По сути он делает тоже самое, что чуть выше объяснялось в диспетчере задач, как например нельзя просто взять и закрыть надоедливый скрипт открывающий-закрывающий дисковод, а запустив данный скрипт все запущенные будут закрыты. Это как клин клином вышибают.

Немного познакомились с VBS скриптами и о том как их писать в блокноте, теперь рассмотрим несколько примеров использования BAT файлов (далее - батник).

Совсем простой батник состоящий всего из одной строки.

  1. Открываем Блокнот.
  2. Пишем следующий код:

    shutdown -s -t 1 -c -f

  3. Далее Файл - Сохранить как - нзвание.bat
  4. Обратите внимание на расширение файла, это уже не VBS скрипт, а батник, по этому в конце названия прописываем.bat (Пример compoff.bat).
  5. Запускаем только что созданный батник двойным щелчком мыши и компьютер выключится (Завершение работы).

Есть такой вариант кода:

shutdown -r -t 1 -c -f

Все также, прописываем в блокноте, сохраняем с расширением.bat и после запуска компьютер перезагрузится (обычная перезагрузка компьютера).

Удаление обновлений

Данный батник пригодится в том случае, если вы уже . В чем суть? В этом батнике перечислены команды по удалению нескольких обновлений, как видно из названия - обновления телеметрии, или как раз одна из шпионских штучек системы, мы однажды уже говорили как отключить , в данном же случае вы просто создаете батник, в содержимое копируете код ниже и запускаете, после чего будут удалены перечисленные обновления.

@echo
echo
echo Step 1: Delete Updates Telemetry
wusa /uninstall /kb:3068708 /quiet /norestart
wusa /uninstall /kb:3022345 /quiet /norestart
wusa /uninstall /kb:3075249 /quiet /norestart
wusa /uninstall /kb:3080149 /quiet /norestart

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

В Интернете встречается много различных скриптов, якобы безвредных, но будьте осторожны, прежде чем пробовать непонятно какой скрипт, некоторые из них могут навредить, например - вносить изменения в реестр, а в случае каких ошибок система будет выдавать ошибки, в таком случае придется или Windows или сделать восстановление системы.

Запустить скрипт на локальном (например, на домашнем) компьютере – весьма просто. А вот как это сделать на удаленном компьютере, т.е. на сервере?

Запуск программы, написанной на языке С, на сервере, можно выполнить либо из консоли (по протоколу SSH), либо путем вызова выполнения системной команды (например, из PHP).

Понятно, что в автоматическом режиме его можно запустить, используя автоматический планировщик Cron. А вот как быть, если требуется запустить вручную (например, для окончательной отладки программы)? Об этом пойдет речь в нашей статье. Статья написана, скорее, для новичков.

Что такое серверный скрипт, для чего он бывает необходим при работе сайта, объяснять не буду. В самом деле, любой мало-мальски функциональный сайт нуждается в автоматизированном выполнении тех или иных операций.

Подавляющее большинство серверных (т.е. таких, которые выполняются на стороне сервера) скриптов пишут, например, на PHP, на Perl (ну, и плюс та или иная СУБД, если, конечно, в ней есть необходимость). РНР используется, если скрипты выполняют относительно небольшой объем работы, т.е. их целесообразно использовать там, где производительность (быстродействие) не является критичным. По сути, имея синтаксис и особенности, во многом сходные с языком С (Си), PHP во многом напоминает не что иное, как VBA от Microsoft. Практически та же самая идеология и, соответственно, примерно аналогичное быстродействие. На наш взгляд, PHP может применяться в основном для создания вспомогательных, не слишком часто запускаемых скриптов, которые, в идеале, запускаются не при первой загрузке страницы сайта. Например, для организации интерфейса, передачи данных с открытой страницы на сервер, ну, или т.п.

Скрипты на Perl обладают более высоким быстродействием, но, в отличие от РНР, Perl заметно сложнее, его код менее читаем. Правда, и возможностей у него побольше, чем у PHP. Однако, если требуется быстрая загрузка сайта (а кто сомневается в актуальности этого), быстрое выполнение скриптов (например, производящие сложные математические вычисления, применяемые, в том числе, в онлайновых играх), то целесообразнее написать их на более производительном языке, например, на С (или С++), но не спутайте его с С#, который и по идеологии, и по быстродействию недалеко ушел от VBA. Да, на С++ (чистый С еще быстрее), а то и на Ассемблере.

Кому-то может показаться, что написание серверных скриптов на С является анахронизмом. Однако, это не так. На самом деле, язык С дает примерно те же возможности, да и синтаксис, в целом, схож с РНР. Правда, серверные скрипты, написанные на С, являются, конечно, более объемными по сравнению с теми, что выполнены на РНР. Потом, в С можно столкнуться с довольно серьезной проблемой, связанной с кириллической кодировкой. В PHP она решается, можно сказать, автоматически, а в С – придется все программировать вручную. Но, повторимся, выигрыш в быстродействии – .

Как запустить на сервере программу, написанную на С (Си)?

На локальном компьютере эта задача особых проблем, вроде бы, не вызывает. В Windows это делается путем нажатия кнопки Пуск , затем Выполнить (или Пуск – Программы – Выполнить ), и в появившемся окне ввести имя программы. В ряде случаев может понадобиться ввод пути.

В LINUX же немного по-другому. Например, для запуска программы, имеющей имя program, надо будет открыть консоль (или терминал, как его называют) и написать в командной строке:

Опять же, если запускается программа, находящаяся не в том каталоге, который открыт в терминале (консоли), необходимо либо ввести путь к программе, либо в терминале перейти в тот каталог, где она находится.

Надеемся, Вы в курсе об одном из основных отличиях систем Windows и LINUX? Windows, начиная с версии XP, дает пользователю графический интерфейс, а консоль там является, на самом деле, лишь настройкой над ним (т.е. запускается соответствующая виртуальная машина, эмулируюшая консоль). Тогда как в LINUX система, наоборот, загружается изначально в консольном режиме, а уже над ней может быть загружена графическая оболочка.

Итак, на локальном компьютере все просто. А вот как это сделать на сервере?

Для этого, естественно, вначале следует скопировать Вашу программу (исполняемый файл) в соответствующий каталог, из которого Вы хотите ее запустить. Понятно, что перед этим программа должна быть соответствующим образом скомпилирована и протестирована на локальном компьютере на предмет наличия ошибок, ибо исправлять ошибки у программы, загруженной на сервер, определенно сложнее.

Однако, просто так запустить программу на сервере не получится. Скажем, нажатие клавишей Enter или двойной щелчок мыши, скорее всего, вызовет попытку открыть ее код.

Чтобы запустить программу на сервере вручную, необходим или соответствующий клиент, который позволит это сделать или, что проще, консольный доступ на сервер.

Вы, наверное, слышали про доступ на серверы на основе таких протоколов прикладного уровня, как http , https , ftp ? Как правило, клиенты, работающие на этих протоколах, не позволяют производить запуск программ вручную. Поэтому для реализации консольного доступа необходимо использование, например, протокола Telnet или, гораздо более безопасного и современного протокола – SSH версии 2. Это – также протоколы прикладного уровня.

Далее все зависит от того, в какой операционной системе работает сервер (хостинг), на котором Вы планируете запускать программу. Как правило, на серверах работает LINUX, например, Debian. Windows гораздо менее популярен. Понятно, что Ваша программа, которую Вы скопировали на сервер и хотите запустить, должна корректно запускаться в операционной системе сервера. Т.е. если, скажем, там установлен LINUX, то и программа должна быть написана и скомпилирована в Линуксе.

Затем, имеет большое значение, в какой операционной системе работает Ваш (домашний) компьютер.

Если он работает в Windows, в этом случае можно воспользоваться утилитой telnet от Microsoft. Она, к сожалению, не соответствует современным требованиям безопасности (в частности, аутенификационные данные – пароль – передаются в открытом виде). Поэтому целесообразно использовать соответствующий клиент для того, чтобы :

Возможно использование SSH-клиента PuTTy. Перейдя по указанной ссылке, Вы можете ознакомиться с подробным описанием технологии консольного подключения, т.е. по протоколу SSH. Клиент необходим для того, чтобы, в частности, эмулировать LUNUX на Вашем компьютере.

Если же Ваш компьютер работает в LINUX, то задача упрощается: необходимо лишь открыть терминал и ввести команду

Ssh [email protected]

U123456789 - логин учётной записи хостинга
123.123.123.123 - IP-адрес сервера

Далее, если параметры введены правильно, система запросит пароль и, после корректного его ввода и проверки системой Вы попадете в консоль НА СЕРВЕР. И, в общем-то, можете делать там все, что потребуется. Ну, в рамках Ваших прав доступа, конечно.

Заметим, что примерно такая же методология может быть использована, скажем, чтобы в режиме удаленного доступа попасть не только на сервер, но и на (частный) компьютер какого-нибудь пользователя - такого же, как Вы. Правда, для этого необходимо знать пароль (который некоторые установить забывают). Но, даже если и неизвестен пароль, возможен доступ в так называемые общие (share) папки. Поэтому некоторые пользователи компьютеров, если они используются для выхода в интернет, иногда вообще отключают эти общие папки или, что проще, останавливают службу server , которая по умолчанию, после установки Windows, является работающей.

Например, чтобы попасть в коренной каталог (на примере нашего сайта), нужно будет набрать команду

Cd ~/www/сайт/

Вам нужно будет указать, соответственно, адрес своего сайта.

Cd пробел имя каталога

Можно перейти в нужный каталог, т.е. в тот, в котором находится программа. А дальше действуем так, как будто находимся на локальном компьютере, т.е. вводим

./program

Если ошибок в Вашей программе нет, то она запустится и начнет выполняться.

При этом хочется обратить Ваше внимание на некоторые, для новичков неочевидные, вещи. Иногда требуется запустить программу в фоновом режиме, т.е. чтобы ее выполнение не мешало другим программам, в том числе и самой оболочке (например, bash). Когда это актуально?

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

Поэтому программу подобного рода целесообразнее запустить (при ручном запуске) в фоновом режиме, что делается путем добавления символа &:

./program &

Однако, это может повлечь за собой новую проблему. Дело в том, что, работая в фоновом режиме, программа никак себя не проявит (до тех пор, пока не произойдет событие, которого она ожидает). Поэтому, естественно, продолжит выполняться (точнее, ожидать событие) и после того, как Вы прекратите сеанс взаимодействия (связи) с сервером.

Вот с домашним компьютером – все проще: выключили его или начали перезагружать – и все, оперативная память чистая, все программы, даже зависшие и те, что работали в фоновом режиме, прекращают выполняться. А ведь здесь мы имеем дело – с СЕРВЕРОМ. Который выключается весьма редко (а если это будет часто, люди не станут размещать там свои сайты). Поэтому… Ваша программа, не будучи выгруженной, так и будет оставаться в оперативной памяти сервера. Во-первых, создавая ему бесполезную нагрузку.


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

Для сервера, работающего в LINUX, для этой цели может быть использована команда

Она выведет перечень всех процессов, запущенных Вами в системе (с учетом самой оболочки bash и служба аутенификации, конечно же). И, что немаловажно, укажет индентификаторы каждой из запущенных программ (столбец с заголовком PID).

Кстати, вот список основных команд, которые здесь могут пригодиться:

  1. ps - выводить список запущенных процессов
  2. jobs - альтернативный путь для просмотра процессов запущенных Вами
  3. ls – просмотр текущего каталога
  4. bg - ставит выполнение процесса в фоновый режим
  5. fg - выводит выполнение процесса из фонового режима
  6. kill - отправляет сигнал на один или несколько процессов (в основном, чтобы "убить" их)

Вот, к примеру, результат, который выводит команда ps :

PID TTY TIME CMD
7318 pts/2 00:00:00 bash
20543 pts/2 00:00:00 ps
28314 pts/2 00:00:00 bash
28315 pts/2 00:00:00 logger

Кстати, команда kill имеет опции, выражаемые целым числом. Среди них имеют значение 1, 2, 15, 9. Последняя – вызывает принудительное, наиболее сильное (или грубое) завершение программы, причем игнорировать его она не сможет. Так, если Вы наберете

Kill -9 28314

то должна выгрузиться оболочка bash (правда, скорее всего, она будет тут же автоматически загружена вновь, но уже с другим идентификатором).

Загрузим имеющуюся на сервере программу, написанную нами на С. Например, это будет program. Так как она предназначена для прослушивания определенного логического порта (под номером, к примеру, 5425, с использованием технологии сокетов), то, пока на этот порт не придет сообщение, она ничего выполнять не будет, просто находясь в состоянии ошижидания. Поэтому загрузим ее в фоновом режиме, чтобы она не мешала работать с оболочкой дальше. При этом:

Bash-4.1$ ./program & 21015

Видим, что программе присвоен идентификатор со значением 21015.

Набираем ps, и вот что видим:

PID TTY TIME CMD
10292 pts/2 00:00:00 bash
10293 pts/2 00:00:00 logger
21015 pts/2 00:00:00 program
21016 pts/2 00:00:00 bash
21017 pts/2 00:00:00 logger
21022 pts/2 00:00:00 ps
28478 pts/2 00:00:00 bash

Так и есть, в третьей строчке находится наша программа с тем самым идентификатором.

Попытаемся (для эксперимента) вновь запустить ту же самую программу, путем набора

./program

Система тут же сообщит:

Bind: Address already in use

Примечание 1 . В программе, по сути, представляющей собой мини-сервер, использована функция bind , привязывающая прослушивающий сокет к номеру порта, равному 5425. Кстати, выбор номера порта достаточно произволен, главное, чтобы он не был ниже 1024 (для самостоятельно разработанных программ), ибо область значений, меньших 1024 отведена под стандартные порты.

Примечание 2 . Не спутайте данную программу (написанную нами), представляющую собой мини-сервер, с программой-сервером хостинга. Наша программа работает под управлением сервера, который, в свою очередь, управляет хостингом. Надеемся, Вы в курсе, что понятие "сервер" включает в себя два смысла (значения): во-первых, это программа, которая управляет работой хостинга, позволяет пользователям открывать страницы сайтов, расположенных на нем. Во-вторых, сервер - это компьютер, на котором расположена и работает программа-сервер. Для сервера наша программа (program ) представляет собой лишь одну из программ, которая может быть запущена пользователем (нами, к примеру), не более того.

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

Так как порт под номером 5425 занят, то, соответственно, команда bind во второй раз сработать не может, вызывая указанную ошибку.

Так вот, кстати, если теперь прекратить сеанс работы, то program останется загруженной в оперативную память сервера. А если еще ее спроектировать так, чтобы она каждый раз генерировала все новые и новые значения портов – то в итоге можно запустить сколько угодно копий указанной программы… и потом получить замечание от хостера. Что нам, конечно, совсем ни к чему.

Поэтому – выгрузим программу из оперативной памяти:

Kill 21015

Система даст сообщение:

Killed ./program

Проверка при помощи команды ps показывает, что все, процесса с названием программ больше нет:

PID TTY TIME CMD
2382 pts/2 00:00:00 bash
2383 pts/2 00:00:00 logger
5848 pts/2 00:00:00 ps
28478 pts/2 00:00:00 bash

Но, может статься, что порт (под номером 5425) все же не освободится. Вообще, при передаче данных на основе сокетов (используется протокол TCP) система резервирует порт даже в случае, если программа прекратила выполняться. Это делается для того, чтобы при неожиданных обрывах связи (что может создавать - для компьютера, который посылает сообщения нашей программе - видимость прекращения ее выполнения) сохранить на некоторое время работоспособным используемый порт – в расчете, если связь восстановится и/или программа опять заработает. Т.е. таким образом, предусмотрена как бы подстраховка от некорректного завершения работы программы.

Кроме того, порт, скорее всего, не освободится в том случае, если работа программы будет завершена некорректно.

Это означает, что вновь, до момента освобождения порта, программа может не заработать – порт-то занят.

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

Netstat -tnlp | grep 5425

Вот что сообщит система:

Tcp 0 0 0.0.0.0:5425 0.0.0.0:* LISTEN 21015/./program

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

Для очистки порта (т.е. для удаления его из системы) можно набрать

Kill -9 21015

Произойдет «жесткое» удаление программы из оперативной памяти, в том числе и всех созданных ею объектов, т.е. логических портов.

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

Сеанс должен закрыться:

Logout Connection to closed.

Таким образом, как видите, ручной запуск скрипта на удаленном сервере не представляет особого труда.