Как проверить, действительно ли запущен сценарий подготовки, предоставленный bash?

Я использую Digital Ocean API для создания пары капель (их имя для сервера).

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

Пример приведен здесь:

https://www.digitalocean.com/community/ tutorials / an-Introduction-to-droplet-metadata

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

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

Я знаю команду history , но она работает только для команд, введенных, когда ssh'ed в машину. На самом деле здесь не отображаются команды из моего сценария bash.

Надеюсь, кто-нибудь знает быстрый и простой способ просмотреть все команды, выполняемые на машине.

Ура.

0
задан 23 April 2017 в 13:55
1 ответ

Ваш сценарий должен что-то делать. Просто проверьте, действительно ли это произошло.

Если это по каким-то причинам невозможно, просто добавьте что-нибудь вроде

touch /tmp/mycheckfile 

в конец скрипта, а затем проверьте, присутствует ли этот файл. Просто, легко и быстро.

Обратите внимание, что это неправильная обработка ошибок, все, что она делает, - это проверка того, что сценарий был выполнен. Если вы поместите set -e в начало скрипта, он также завершится при любой ошибке и, таким образом, не будет создавать файл, если что-то пошло не так в скрипте.

Если вы хотите усложнить ситуацию, вы можете использовать все методы создания отчетов об ошибках и перенаправления вывода, разрешенные bash, включая запись в системный журнал с помощью команды logger .


Вы также можете вывести каждую строку, выполняемую вашим скриптом, с помощью set -x . В DO выходные данные будут перечислены в системном журнале службы cloud-init. Вы также можете записать его в файл следующим образом:

#!/bin/bash
set -x 
{
   do-something
   do-something-else
} 2>/tmp/mylogfile

with приведет к содержимому файла, подобному этому:

+ do-something
+ do-something-else

Обратите внимание, что я перенаправил вывод STDERR с помощью 2> , поскольку эти строки будут отправлены в этот поток.

2
ответ дан 4 December 2019 в 13:33

Теги

Похожие вопросы