Я использую Digital Ocean API для создания пары капель (их имя для сервера).
Эти капли могут принимать пользовательские метаданные, которые в основном представляют собой файл с командами оболочки, которые я хочу запустить для подготовки сервера при создании.
Здесь приводится пример:
https://www.digitalocean.com/community/tutorials/an-introduction-to-droplet-metadata
Откровенно говоря, мне просто нужно проверить, успешно ли запустился сценарий bash. Я знаю несколько громоздких способов проверить это, но надеюсь, что будет что-нибудь попроще.
Думаю, проще всего было бы просмотреть историю команд, которые выполнялись на машине, или что-то в этом роде. Возможно ли это для команд, запускаемых из сценария оболочки?
Я знаю history
команда, но это работает только для команд, введенных пока ssh'ed
в машину. На самом деле здесь не отображаются команды из моего сценария bash.
Надеюсь, кто-нибудь знает быстрый и простой способ просмотреть все команды, выполняемые на машине.
Ура.
Ваш сценарий должен что-то делать. Просто проверьте, действительно ли это произошло.
Если это почему-то невозможно, просто добавьте что-нибудь вроде
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>
, так как эти строки будут отправлены в этот поток.