LoginSignup
12
10

More than 5 years have passed since last update.

君はsleepコマンドのdサフィックスの使い方を知っているか?

Posted at

すいません。
タイトルは釣りです。

まず…

UNIXで一般的なsleepコマンドは、指定した秒数スリープをするというおなじみのコマンドですね。

$ sleep 10
(10秒間…)
$

さて、この秒数には'm'や'h'、'd'サフィックスを指定することができるのをご存じでしたでしょうか?
helpを見てみましょう。

$ sleep --help
Usage: sleep NUMBER[SUFFIX]...
  or:  sleep OPTION
Pause for NUMBER seconds.  SUFFIX may be 's' for seconds (the default),
'm' for minutes, 'h' for hours or 'd' for days.  Unlike most implementations
that require NUMBER be an integer, here NUMBER may be an arbitrary floating
point number.  Given two or more arguments, pause for the amount of time
specified by the sum of their values.
(snip..)

つまり、'm'サフィックスを指定すれば分、'h'を指定すれば時、'd'を指定すれば日単位でスリープする時間を指定できるわけです。(デフォルトは's'で、当然ながら秒単位になります。)

で?

この'd'サフィックスの使いみちって何でしょうか? 日単位でsleepをして何が嬉しいんでしょうか?

実はこれDockerでEntryPointが指定されていないイメージをRUNするときの代わりのEntryPointに使うことが出来ます。

$ docker run <container name> /bin/sleep 365d
$ docker exec -it <container name> /bin/bash

Dockerコンテナをrunning状態で維持させるためには、EntryPointのプログラムがフォアグラウンドで動作し続ける必要があります。

母艦を汚さないための作業環境を作ってそれを立てたい場合は、EntryPointとしてsleepをフォアグラウンドデーモンとして立てるわけです。

Docker Composeを使うとこんな感じでもっと簡単になります。

docker-compose.yml
---
version: '2'
services:
  base:
    image: <container name>
    entrypoint: /bin/sleep 365d
$ docker-compose -d up
$ docker exec -it <container name> /bin/bash

最後に

何でこの記事を書いたのかって?
sleepの思わぬ使いみちを見つけてしまったので、小躍りした勢いで書いてしまっただけです。はい。

どっとはらい。

12
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
10