crontabで起動時にスクリプトを走らせたいとき

crontabでは、日時指定だけではなく、起動時にも何かを走らせることが出来ます。
以下、WSLの『man 5 crontab』で確認しました。

All of the `@’ commands that can appear in place of the first five fields are extensions.

Instead of the first five fields, one of eight special strings may appear:

識別子 意味
@reboot 起動時に実行
@yearly 毎年1月1日の0時0分に実行
@annually @yearlyと同じ
@monthly 毎月1日の0時0分に実行
@weekly 毎週日曜日の0時0分に実行
@daily 毎日0時0分に実行
@midnight 毎日0時0分に実行
@hourly 毎時0分に実行

使い方

行頭の『* * * * *』の代わりに、『@reboot』等を置きます。

Azureにアカウントを作ってRedmineを入れてみるテスト

Azureの無償枠の中にUbuntu 18.04な仮想サーバを作り、SendGrid経由でメールが発報できるようにし、Redmineを立ち上げてみました。

以下、その手順となります。

尚、SSH鍵認証でログインする場合は、事前に公開鍵を用意しておいて下さい。

Azureアカウント作成とポータルへのログイン

※アカウントをお持ちの場合は、この項はパスして下さい

Arureの入口に行き、適当なメアドでアカウントを作成して下さい。

作成後、そのアカウントでサインインし、Azureポータルにサインインして下さい。

リソースグループ作成

次の手順でリソースグループを作成して下さい。

  1. メイン画面左ペインの『リソースグループ』をクリック
  2. 『+追加』をクリック
  3. サブスクリプション欄で『無料試用版』を選択
  4. リソースグループ欄に作成するリソースグループ名を入力
  5. リージョン欄は『(アジア太平洋)東日本』などを選択
  6. 『確認及び作成』をクリック

仮想ネットワーク作成

次の手順で仮想ネットワークを作成して下さい。

  1. メイン画面左ペインの『仮想ネットワーク』をクリック
  2. 『+追加』をクリック
  3. 名前欄に適当な名前を入力
  4. アドレス空間欄に、利用するアドレス空間を入力
    (例:10.0.0.0/16)
  5. サブスクリプション欄で『無料試用版』を選択
  6. リソースグループ欄で先程作成したリソースグループ名を選択
  7. 場所欄は『(アジア太平洋)東日本』などを選択
  8. サブネットの名前は適当に入力
  9. サブネットのアドレス範囲は、先程のアドレス空間内のものを入力
    (例:10.0.0.0/24)

仮想マシン作成

次の手順で仮想マシンを作成して下さい。

  1. メイン画面左ペインの『Virtual Machines』をクリック
  2. 『+追加』をクリック
  3. サブスクリプション欄で『無料試用版』を選択
  4. リソースグループ欄で先程作成したリソースグループ名を選択
  5. 仮想マシン名に作成する仮想マシンの名前を入力
  6. 地域欄は『(アジア太平洋)東日本』などを選択
  7. イメージ欄は作成するOSを選択
    今回はUbuntu 18.04としました
  8. サイズは作成する仮想マシンのリソースを選択
    無償枠で使えるB1sが良いと思います
  9. 認証の種類を選択(パスワードまたはSSH公開キー)
    • パスワード認証の場合
      1. ユーザ名欄に、認証に使用するユーザ名を投入
        ユーザ名の右側にチェックが付くことを確認
      2. パスワード欄およびパスワードの確認欄に、上記ユーザで使用するパスワードを投入
        それぞれの欄の右側にチェックマークが付くことを確認
    • SSH効果キー認証の場合
      1. ユーザ名は認証に使用するユーザ名を投入
        ユーザ名の右側にチェックマークが付くことを確認
      2. SSH公開キー認証の場合SSH公開キーは別途用意したSSH公開鍵をペースト
        SSH公開キー欄の右側にチェックマークが付くことを確認
  10. 『次:ディスク』をクリック
  11. ディスクの種類を選択
    HDDで良いと思います
  12. 『次:ネットワーク』をクリック
  13. 仮想ネットワーク欄で、先程作成した仮想ネットワーク名を選択
  14. サブネット欄で、先程作成したサブネットを選択
  15. 『次:管理』をクリック
  16. 診断ストレージアカウントは表示されている物を使用
    表示されていない場合、『新規作成』をクリック、名前欄に名前を入力し、『OK』をクリック
  17. 『確認および作成』をクリック
  18. エラーがなければ仮想サーバが作成されますので、しばし待ちます
    AWSやGCPに比べると、デプロイや削除は待たされる感じです
  19. 作成した仮想マシン名の状態が『実行中』になればok

FireWallの設定

デフォルト状態では外部からの接続が出来ないため、FireWallの設定を行います。

  1. 作成した仮想マシン名をクリック
  2. 『設定≫ネットワーク』をクリック
  3. 『受信ポートの規則を追加する』をクリックし、ルールを追加
    自分のグローバルIP(私はCMANさん等で調べています)をソースに、22/tcp,80/tcp,443/tcpあたりを追加すればよいでしょう

仮想サーバの環境設定

以下の手順は、Ubuntu 18.04な仮想サーバにsshで接続し、rootに昇格しての作業しています。

  1. タイムゾーン設定等
    timedatectl set-timezone Asia/Tokyo
    apt update
    apt -y upgrade
  2. IPv6抑制
    # sysctlでのipv6抑止
    cat <<'__EOF__' | tee -a /etc/sysctl.d/70-disable-ipv6.conf
    net.ipv6.conf.all.disable_ipv6 = 1
    net.ipv6.conf.default.disable_ipv6 = 1
    __EOF__
    # 反映
    sudo sysctl --system
    # スタートアップスクリプトでipv6抑止
    cat <<'__EOF__' | tee -a /etc/rc.local
    #!/bin/bash
    # /etc/rc.local
    # Load kernel variables from /etc/sysctl.d
    /etc/init.d/procps restart
    exit 0
    __EOF__
    # 実行権限を付与
    chmod 755 /etc/rc.local
  3. swap領域作成
    # swap領域作成
    fallocate -l 2G /swapfile
    chmod 600 /swapfile
    mkswap /swapfile
    swapon /swapfile
    echo "/swapfile none swap sw 0 0" >> /etc/fstab
  4. 一旦再起動
    # 一旦再起動
    shutdown -r now

仮想マシンからメールを発信する場合(Phase①)

Postfix設定を行います。

私はいつもこちらのお世話になっています。

Server World Postfix : インストール/設定2018

仮想マシンからメールを発信する場合(Phase②)

SendGridのアカウントが無い場合は、ここで作成します。既にお持ちの場合は、本項の1~11は飛ばして下さい。

  1. Azureコンソール上部の検索欄で、『sendgrid accounts』を検索します
  2. 『+追加』をクリック
  3. Name欄に適当な名前を入力
  4. Password欄とConfirm Password欄に適当なパスワードを入力
  5. サブスクリプション欄で『無料試用版』を選択
  6. リソースグループ欄で先程作成したリソースグループ名を選択
  7. Pricing tierで『Free』をクリック、『選択』をクリック
  8. Contact Informationで連絡先を入力し、『OK』をクリック
  9. 法律条項で『作成』をクリックすると、SendGridのアカウントが作成されます
  10. 作成されたSendGridの名前をクリック
  11. SettingペインのConfigurationsをクリック
  12. Username欄の右側のコピーアイコンをクリック
    先程投入したパスワードとともに、/etc/postfix/sasl_passwd に記録、DB化します
    # SendGrid用アカウントをpostfix側に指示
    cat <<'__EOF__' | tee -a vi /etc/postfix/sasl_passwd
    [smtp.sendgrid.net]:587 SendGrid画面でコピーしておいたUsername:そのときのパスワード
    __EOF__
    # sasl_passwdのDB化
    chmod 600 /etc/postfix/sasl_passwd
    postmap /etc/postfix/sasl_passwd

仮想マシンからメールを発信する場合(Phase③)

sasl_passwdをpostmapしたあとの作業です。

# PostfixでSendGridを利用する設定
cat <<'__EOF__' | tee -a /etc/postfix/main.cf
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_tls_security_options = noanonymous
smtp_tls_security_level = encrypt
header_size_limit = 4096000
relayhost = [smtp.sendgrid.net]:587
__EOF__
sytemctl restart postfix

bitnami Redmineのインストール

  1. bitnami Redmineのダウンロードページに移動
    https://bitnami.com/stack/redmine/installer
  2. Download for Linux 64-bitボタンを右クリックして、ダウンロードリンクを取得
  3. 仮想サーバの置き場所にダウンロード
    4.0.3-3の場合の例
    cd ~
    wget https://bitnami.com/redirect/to/554708/bitnami-redmine-4.0.3-3-linux-x64-installer.run
    chmod 744 ./bitnami-redmine-4.0.3-3-linux-x64-installer.run
  4. インストーラを実行します
    ./bitnami-redmine-4.0.3-3-linux-x64-installer.run

    あとはインストーラの指示通りに進めます

  5. インストールが完了するまで待ちます
    次の表示が出たら、Enterキーを押してRedmineを起動して下さい
    —————————————————————————-
    セットアップウィザードによる Bitnami Redmine Stack のインストールが完了しました。

    Redmine アプリケーション起動 [Y/n]:Y

    情報: Bitnami Redmine Stack については、ブラウザで
    http://127.0.0.1:80 にアクセスしてください。
    続けるには [Enter] キーを押してください :

  6. ブラウザで http://Azureから割り振られたグローバルIP/ にアクセスし、Redmineの利用を開始して下さい

GCPのUbuntuでsshguardを有効にしてみる

GCP(Google Cloud Platform)で建ててみたサーバのsshへのアタックがかなり多いので(普通はsshのポート番号を変えておくのだと思いますが)sshguardとufwを連携してみます。

失敗したときシリアルコンソールで繋げられるように、パスワード付きのアカウントを一つ用意しておいて下さい(ユーザ名『ubuntu』のパスワードを変更でも良いかも)。

設定でちょっと嵌まったので、自分用にチラ裏。

# ufw自動起動設定
systemctl enable ufw
# ufw起動
ufw enable
# SSHを許可する例
ufw allow from 0.0.0.0/0 to any port ssh
# httpを許可する例
ufw allow from 0.0.0.0/0 to any port http
# GCPのヘルスチェッカーを許可
ufw allow from 169.254.169.254/32 to any
# ポリシー読み込み
ufw reload

# sshguardの設定(ちょっぴり厳しくしてみる)
vi /etc/default/sshguard
# 15行目
ARGS="-a 30 -p 420 -s 3600"
systemctl restart sshguard

念のため再起動して動作を確認して下さい。

# これらで確認してみる
tail -f /var/log/auth.log
systemctl status ufw
systemctl status sshguard
iptables -vL ufw-user-input
iptables -vL sshguard

設定に失敗してufwやsshguardがコケている時もありますので…。

スクリーンセーバーからの復帰に失敗するとき

本Tipsは

  • Windows10
  • ディスプレイドライバとしてIntel(R) HD Graphicsを使用している
  • 復帰時にパスワード入力を要求するように設定している
  • サービスとしてIntel(R) HD Graphics Control Panel Service(igfxCUIService)が動いている

状態で、

  1. スクリーンセーバー画面になっている または 省電力でディスプレイが落ちている
  2. Ctrl-Alt-Del押下
  3. 画面がフラッシュするが、パスワード入力画面に遷移せず、一切の操作ができなくなる

場合の対処法となります。

Step1(グラフィックスドライバの更新)

  1. 対象機に該当する最新版のIntel HD Graphicsのドライバーをダウンロードします
  2. 圧縮ファイルの場合、ダウンロードファイルの『プロパティ』で『ブロックの解除』を行ってから展開します
  3. PCをネットワークから切断します(有線/無線両方)
    ※ドライバーがネットワーク経由で再インストールされるのを防ぐため
  4. コントロールパネルの『プログラムのアンインストール』を開き、『インテル(R)グラフィックス・ドライバー』という項目をクリック、アンインストールします
  5. 再起動を要求された場合は再起動します
  6. デバイスマネージャーを開き、『ディスプレイアダプター』を開き、『Microsoft基本ディスプレイアダプター』になっていることを確認します
    ここでインテルのドライバーが残っている場合は、
    1. 当該ドライバーをダブルクリックします
    2. 『プロパティ』→『ドライバータブ』→『削除』と進みます
    3. 『このデバイスのドライバーソフトウェアを削除する』にチェックを入れ、『OK』をクリックします
    4. 念のためPCを再起動します
    5. 更にインテルのドライバーが残っている場合、『Microsoft基本ディスプレイアダプター』になるまで削除→再起動を繰り返します
  7. ダウンロードしたドライバーをインストールします

Step2(怪しいサービスを停止)

  1. Intel(R) HD Graphics Control Panel Serviceのスタートアップの種類を記録し、サービスを停止、スタートアップを無効化します
  2. 念のためPCを再起動します

これで様子を見て改善しない場合は、Step2で停止したigfxCUIServiceのスタートアップを元に戻して下さい。

ドライバーのアップデート(WindowsUpdateや手動)、OS自体のWindowsUpdateによって事象が再発するようになった場合は、この手順をふたたび試してみて下さい。

QUALYS SSL LABSのSSL Server Testで合格するために

QUALYS SSL LABSのSSL Server Testで合格するために気をつけておいた方が良いかと思われる、先日の『WebサイトのSSL化の時には中間証明書にも気をつけてあげて下さい』対応の時にも参考にした自分用メモです(最初にこれらのページにお世話になったのは、2018年5月6日という記録が残っていました)。