Автоматически сервер закрытия на неактивности (SSH)?

... или просто используйте этот код VBA бесплатно и не платите 80$ за что-то настолько простое:

Public Sub DeleteMessagesWithRepliesWithoutAttachments()
Dim myOutlook As Outlook.Application
Dim myNameSpace As Outlook.NameSpace
Dim myMailItem1 As MailItem
Dim myMailItem2 As MailItem
Dim lMailItem As Long
Dim deleteThisOne(10000) As Boolean
Dim cID(10000) As String
Dim atts(10000) As Integer
Dim numItems As Long
Dim ci1 As String, ci2 As String
Dim nd As Integer
On Error GoTo Err1:
Set myOutlook = Outlook.Application
Set myNameSpace = myOutlook.GetNamespace("MAPI")
numItems = myOutlook.ActiveExplorer.CurrentFolder.Items.Count
If Outlook.ActiveExplorer.Selection.Count > 0 Then    
    For m = 1 To numItems
        Set myMailItem1 = myOutlook.ActiveExplorer.CurrentFolder.Items(m)
        cID(m) = myMailItem1.ConversationIndex
        atts(m) = myMailItem1.Attachments.Count
    Next
    For m = 1 To numItems - 1
        For n = m + 1 To numItems
            If Len(cID(n)) > Len(cID(m)) Then
                If Left(cID(n), Len(cID(m))) = cID(m) And atts(m) = 0 Then
                    deleteThisOne(m) = True
                End If
            ElseIf Len(cID(m)) > Len(cID(n)) Then
                If Left(cID(m), Len(cID(n))) = cID(n) And atts(n) = 0 Then
                    deleteThisOne(n) = True
                End If
            End If
        Next n
    Next
End If
For m = numItems To 1 Step -1
    If deleteThisOne(m) = True Then
        Set myMailItem1 = myOutlook.ActiveExplorer.CurrentFolder.Items(m)
        myMailItem1.Delete
        nd = nd + 1
    End If
Next m
MsgBox (Str(nd) + "items were deleted.")
Exit Sub

Err1:
    MsgBox ("There was an error - sorry! Try deleting non-messages from the folder first.")
End Sub
7
задан 24 March 2013 в 13:27
5 ответов

По состоянию на январь 2013 г. Amazon CloudWatch предоставляет возможность использовать Amazon CloudWatch для обнаружения и Отключите неиспользуемые экземпляры Amazon EC2 , см. Вводную запись в блоге Amazon CloudWatch - Действия по тревоге для получения подробной информации об этой функции:

Сегодня мы даем вам возможность остановить или прекратите ваш EC2 при срабатывании тревоги CloudWatch . Вы можете использовать это как отказоустойчивый (обнаружение ненормального состояния и последующие действия) или как часть логика обработки вашего приложения (ожидание ожидаемого условия и тогда действуй). [выделено мной]

Ваш вариант использования указан в разделе Failsafe Ideas , а именно:

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

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

6
ответ дан 2 December 2019 в 23:28

Если все, что вам нужно, это чтобы сервер работал, пока вы вошли в систему, а сеанс простаивал менее n единиц времени, вы можете сделать это с помощью сценария cron, который вы упомянуто, отслеживая вывод w (1) , который сообщает IDLE время для вошедшего в систему пользователя, которое вы можете использовать.

2
ответ дан 2 December 2019 в 23:28

Вы можете создать сценарий задания cron прямо на самом экземпляре, который использует такую ​​команду, как

netstat | grep ssh | grep ESTABLISHED

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

/sbin/shutdown -h now
2
ответ дан 2 December 2019 в 23:28

У меня также есть несколько экземпляров EC2, которые я использую только время от времени. Вот созданная мной служба systemd , которая выключает экземпляр, когда в течение некоторого времени нет активности SSH.

1
ответ дан 2 December 2019 в 23:28

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

#!/bin/bash
#
# Shuts down the host on inactivity.
#
# Designed to be executed as root from a cron job.
# It will power off on the 2nd consecutive run without an active ssh session.
# That prevents an undesirable shutdown when the machine was just started, or on a brief disconnect.
#
# To enable, add this entry to /etc/crontab:
# */5 *   * * *   root    /home/ubuntu/dotfiles/bin/shutdown-if-inactive
#
set -o nounset -o errexit -o pipefail

MARKER_FILE="/tmp/ssh-inactivity-flag"

STATUS=$(netstat | grep ssh | grep ESTABLISHED &>/dev/null && echo active || echo inactive)

if [ "$STATUS" == "inactive" ]; then
  if [ -f "$MARKER_FILE" ]; then
    echo "Powering off due to ssh inactivity."
    poweroff  # See https://unix.stackexchange.com/a/196014/56711
  else
    # Create a marker file so that it will shut down if still inactive on the next time this script runs.
    touch "$MARKER_FILE"
  fi
else
  # Delete marker file if it exists
  rm --force "$MARKER_FILE"
fi

Чтобы запускать этот скрипт каждые 5 минут, выключая экземпляр после 10 минут бездействия, добавьте эту запись в /etc/crontab:

*/5 *   * * *   root    /home/ubuntu/bin/shutdown-if-inactive

Изменить /home/ubuntu/bin на путь, по которому был сохранен скрипт.

Это было протестировано на экземпляре EC2 под управлением Ubuntu 20.04. См. источник .

Это расширяет ответ @dmohr.

2
ответ дан 28 April 2021 в 04:37

Теги

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