Bash で、英単語の前後に半角スペース挿入する方法

以下のスクリプトで、YOUR_FILENAME のところを対象となるファイル名を指定して実行する。まずは元のファイルを YOUR_FILENAME.org という名前でコピー、オリジナルのファイルを上書きする形で英単語の前後に半角スペースを入れて置換する。

export FILENAME='index.rst'; \
cp ${FILENAME} ${FILENAME}.org; \
cat ${FILENAME}.org | sed y/0123456789/0123456789/ | \
sed -E "s/([^ \t:\*0-9\.,<>\-~a-zA-Z()ー[:punct:]]|\" \w+  )([a-zA-Z])/\1 \2/g" | \
sed -E "s/([a-zA-Z])([^ \t:\*0-9\.,<>\-~a-zA-Z()ー[:punct:]]|  \w+ \"$)/\1 \2/g" > ${FILENAME}

HTML 文書の中でこの置換を行いたい場合、<span>...</span&gt によって見えないスペースが加えられていることがあるため、以下のスクリプトで対応する。

続きを読む

Drupal 8 で、コアやモジュールをアップデートしたらエラーが出るようになったしまった場合の対処方法

Drupal 8 で、コアやモジュールをアップートしたらエラーが出るようになってしまった、というのは実はよくある。これは Drupal 8 がキャッシュの仕組みを積極的に取り入れたことも影響しているように思う。**WSOD(White Screen of Death)**になったり、Fatal エラーが出たら、以下をチェツクする。

続きを読む

DevOps の勘所

1. システム内で、すべてのサーバの時刻を合わせる。

  • 開発中やサービス開始直後は問題にならないがサービス開始後、安定稼働しているからといってサーバの時刻を合わせず 1年くらい放置しているとどんどん時刻がずれていく。結果、ログの時刻が合わなくなったりサーバ同士が同期しなくなったり影響が出てくる。
  • みんな大好きアップルのタイムサーバを使わせてもらって、
ntpdate time.apple.com

などを cron ジョブでまわす。

2. 常にディスク容量をチェックする。

続きを読む

Linux で、ユーザーをグループに追加する方法

Linux でユーザーをグループに追加する方法は1つだけではなく、実はいろいろな方法がある。コマンドでいうと、gpasswd と usermod、adduser の3つ。

このうち、ユーザーをグループに追加するには gpasswd を使うとよい。

gpasswd -a <USERNAME> <GROUPNAME>

usermod は、

usermod -aG <GROUPNAME> <USERNAME>

のように使うが、-a オプションを忘れて usermod -G ... だけにしてしまうと、なんと既存のグループが上書きされてしまうので注意が必要である。

Ubuntu 系では、adduser が使える。

adduser <USERNAME> <GROUPNAME>
続きを読む

Docker で、イメージの名前を変更する方法

tag コマンドを使う。

docker tag <image_id> <repository_name>:<tag>

ここで、:tag の部分は省略して <repository_name> だけにしてもよい。コロン(:)の後の tag は、日付やバージョンをつけて同じリポジトリの中で異なるバージョンのイメージを置くという感じ。

docker tag <image_id> <repository_name>
続きを読む

Ubuntu 16.04 LTS の Docker で、サーバ再起動後に Docker コンテナ内のサービスを自動起動する方法

Ubuntu 14.04 LTS では、サーバ起動時はUpstart というもので Apache などのサービスを起動していたのだけれど、16.04 LTS からは Systemd というのに変わってしまった。それによって、これまで 14.04 LTS ではうまくいっていたサーバ起動時の Docker コンテナ起動ができなくなってしまった・・・

・・・と、お嘆きの皆様、systemd なんかをいろいろいじってみたのだが、以下のようなシンプルな手順で今は落ち着きました。

docker run --name <Docker 名> -h <ホスト名> -it <コンテナ ID> /bin/bash

でコンテナを起動しておく。そのあと、/etc/rc.local (の、最後の方)に

vi /etc/rc.local

以下のように docker start を書いておくだけ。

続きを読む

Linux の cron で、月末だけコマンドを実行する方法

/etc/crontab を編集する

vi /etc/crontab

月末だけ実行

H 23 28-31 * * /usr/bin/test $( date -d '+1 day' +%d ) -eq 1 && <実行したいコマンド>

最終金曜日のみ実行の場合

0 0 * * 5 /usr/bin/test $( date +%m ) -ne $( date --date '7 day' +%m ) && <実行したいコマンド>

特に、

/usr/bin/test $( date -d '+1 day' +%d ) -eq 1

や

/usr/bin/test $( date +%m ) -ne $( date --date '7 day' +%m )

は、Jenkins でも活躍しそう。

続きを読む