バックグラウンドで実行したい処理を screenで実行したい、しかし、実行したあとはすぐにデタッチして放置する

このような、デーモン化するまでもないけど頻繁にバックグラウンドで実行しておくような処理(フロントエンドのツールによくあるwatchで自動ビルドしてくれるやつとか、ビルトインサーバ起動しておくとか)を実行する際に、いちいち screenでアタッチして、[Ctrl+A][D]してデタッチ、という一連の動作が面倒くさい

そういった時に使う screenコマンドの実行方法のメモです

例として、 watch dateを実行します

1
2
// 実行前(何も動いてないのを確認)
$ ps ax | grep date
1
2
// screen -d -m [実行したいコマンド] で実行
$ screen -d -m watch date
1
2
3
4
5
6
7
8
9
10
11
12
13
// 実行後(プロセスが動いてる)
$ ps ax | grep date
3026 ? Ss 0:00 SCREEN -d -m watch date
3032 pts/5 Ss+ 0:00 watch date

// 実行後(セッションもある)
$ screen -ls
There are screens on:
3026..DESKTOP-KP32JIO (2020年06月05日 23時26分17秒) (Detached)
1 Sockets in /home/username/.screen.

// アタッチしてみて確認
$ screen -r 3026