20200329のLinuxに関する記事は6件です。

日付ではなくファイル数でログローテーションする

初めに

よく7日前のログファイルを消してローテーションのように日付が条件として使われますが、
今回は個数指定でローテーションする場合のbashサンプルを作ってみました。

ローテーション対象ファイル

今回ローテーションするファイルは
server.log.YYYY-MM-DDの形式でローテーションすることとします。

 /var/log/server.log # 最新のファイル
 /var/log/server.log.2020-03-25
 /var/log/server.log.2020-03-24
 /var/log/server.log.2020-03-23
 /var/log/server.log.2020-03-22

実装

    #!/bin/bash

    ROTATE_GEN=7             # ローテーション世代(今回は7個残す)
    LOG=/var/log/server.log  # 対象ファイル

    # 日付付きでファイルを退避
    mv ${LOG} ${LOG}.`date +"%Y-%m-%d"` 

    # 現在のファイル数(FILE_CNT) - 世代数(ROTATE_GEN)
    # = 削除するファイル数(RM_CNT)
    FILE_CNT=`ls -1t ${LOG}.* | wc -l`
    RM_CNT=`expr ${FILE_CNT} - ${ROTATE_GEN}`

    # RM_CNTの数だけファイルを削除
    if [[ $RM_CNT -gt 0 ]] ; then
     ls -1t ${LOG}.* | tail -n ${RM_CNT} | xargs rm -f
    fi

補足

 * lsのオプションは'l(エル)'ではなく'1(イチ)'

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux Live USBを作成するコマンドを作った

はじめに

LinuxのLive USBを作成するコマンドを作成しました。(参考:Live USBとは)
今のところ実行可能環境はLinuxなので、Linux上でLive USBを作りたい人は使ってみてください。
是非Macでも使えるようにしたいですね。

1. インストール

GitHub

git clone https://github.com/hiwm0126/create-live-usb.git ~/.create-live-usb
sudo ln -snf ~/.create-live-usb/main.sh /usr/local/bin/create-live-usb

2. 使い方

ISOイメージは好きなディストリビューションのものを。各々用意してください。
例ではPeppermintを使ってます。

$ sudo create-live-usb [iso image path] <-- (ex: sudo create-live-usb ~/Download/Peppermint-10-20191210-amd64.iso)

==============BLOCK DEVICE INFO=================

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1  3.8G  0 disk 
└─sda1        8:1    1  3.8G  0 part 
mmcblk0     179:0    0 29.8G  0 disk 
├─mmcblk0p1 179:1    0   63M  0 part 
├─mmcblk0p2 179:2    0    1K  0 part 
├─mmcblk0p5 179:5    0   32M  0 part 
├─mmcblk0p6 179:6    0  256M  0 part /boot
└─mmcblk0p7 179:7    0 29.5G  0 part /

================================================

which device do you want to use?

---device name list---
sda       
mmcblk0   
----------------------

Enter the dvice name : <-- (ex: sda)
mkfs.fat 4.1 (2017-01-24)
1560281088 bytes (1.6 GB, 1.5 GiB) copied, 266 s, 5.9 MB/s 
372+1 records in
372+1 records out
1562378240 bytes (1.6 GB, 1.5 GiB) copied, 266.846 s, 5.9 MB/s

--------------------------------------

Creating Live USB is complete.
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Linux Live USBを作成するコマンド

はじめに

LinuxのLive USBを作成するコマンドを作成しました。(参考:Live USBとは)
実行可能環境はmacOSとLinuxです。

1. インストール

GitHub

$ git clone https://github.com/hiwm0126/create-live-usb.git ~/.create-live-usb
$ sudo ln -snf ~/.create-live-usb/main.sh /usr/local/bin/create-live-usb

2. 使い方

引数で指定するISOイメージは、好きなディストリビューションのものを各自用意してください。
例ではPeppermintを使ってます。
macOSとLinuxで操作は変わりませんが、表示が少し異なるので両方紹介します。

2-1. Linuxの例

$ sudo create-live-usb ~/Download/Peppermint-10-20191210-amd64.iso

==============BLOCK DEVICE INFO=================

NAME        MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda           8:0    1  3.8G  0 disk 
└─sda1        8:1    1  3.8G  0 part 
mmcblk0     179:0    0 29.8G  0 disk 
├─mmcblk0p1 179:1    0   63M  0 part 
├─mmcblk0p2 179:2    0    1K  0 part 
├─mmcblk0p5 179:5    0   32M  0 part 
├─mmcblk0p6 179:6    0  256M  0 part /boot
└─mmcblk0p7 179:7    0 29.5G  0 part /

================================================

which device do you want to use?

---device name list---
sda       
mmcblk0   
----------------------

Enter the dvice name : sda <-- デバイス名を入力
1560281088 bytes (1.6 GB, 1.5 GiB) copied, 266 s, 5.9 MB/s 
372+1 records in
372+1 records out
1562378240 bytes (1.6 GB, 1.5 GiB) copied, 266.846 s, 5.9 MB/s

--------------------------------------

Creating Live USB is complete.

2-2. macOSの例

$ sudo create-live-usb ~/Download/Peppermint-10-20191210-amd64.iso

==============BLOCK DEVICE INFO=================

/dev/disk0 (internal, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      GUID_partition_scheme                        *251.0 GB   disk0
   1:                        EFI EFI                     209.7 MB   disk0s1
   2:                 Apple_APFS Container disk1         250.8 GB   disk0s2

/dev/disk1 (synthesized):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:      APFS Container Scheme -                      +250.8 GB   disk1
                                 Physical Store disk0s2
   1:                APFS Volume Macintosh HD - Data     107.7 GB   disk1s1
   2:                APFS Volume Preboot                 83.5 MB    disk1s2
   3:                APFS Volume Recovery                528.1 MB   disk1s3
   4:                APFS Volume VM                      1.1 GB     disk1s4
   5:                APFS Volume Macintosh HD            11.2 GB    disk1s5

/dev/disk2 (external, physical):
   #:                       TYPE NAME                    SIZE       IDENTIFIER
   0:     FDisk_partition_scheme                        *4.0 GB     disk2
   1:                       0xEF                         2.4 MB     disk2s2


================================================

which device do you want to use?

---device name list---
disk2 
----------------------

Enter the dvice name : disk2 <-- デバイス名を入力
460+0 records in
460+0 records out
1929379840 bytes transferred in 324.378169 secs (5947934 bytes/sec)

--------------------------------------

Creating Live USB is complete.

※コマンド実行はご自身の責任で行ってください。コマンド実行に関して発生した事象について、筆者は一切の責任を負いません。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LPIC-1を受けてみた感想。「おすすめ度・難易度・勉強時間」

LPIC-1を受けてみた

私は受託開発のベンチャー企業で約1年実務を経験しています。技術力と知識量を上げるため、LPIC-1を受けてみました。なので、資格で合格することが目的ではなく、資格を受ける上で学習で得られる知識が目的でした。試験に合格したので、そこで得られた情報を共有します。

この記事はこんな方におすすめ

  • LPICが実務に役立つのか知りたい
  • おすすめ度・難易度が知りたい
  • 学習時間やおすすめの学習教材が知りたい

実務で役立つのか?

僕は結構役立ちました。以前はLinuxのことをよくわからずにその場しのぎで使用していたのですが、LPICで学習したことで体系的に知識が身につきました。
ただし、資格は手段なので別に受けなくても問題ありません。僕の場合は、明確な目標がないと学習しないのでLPICを活用しました。

試験概要

  • Linux技術者認定試験で、Linux技術者としての技術力を認定するIT資格
  • 国際的に認められたIT資格
  • 試験会場は全国(各国)
  • 対象試験:101試験/102試験(5年以内に両方取得する必要あり)
  • 受験料金:15,000円(合計30,000円)
  • 回答方法:コンピュータを使った選択式
  • 試験時間:90分
  • 合格ライン:65~75%程度

試験項目

■101
- システムアーキテクチャ
- Linuxのインストールとパッケージ管理
- GNUとUnixのコマンド
- デバイス、Linuxファイルシステム、ファイルシステム階層標準

■102
- シェル、スクリプト、およびデータ管理
- インターフェイスとデスクトップ
- 管理タスク業務
- 必須システムサービス
- ネットワーキングの基礎
- セキュリティ

おすすめ度・難易度

項目 評価(5段階)
おすすめ度 3
難易度 3

例えば基本情報処理試験を目安にすると、おすすめ度3、難易度3といった具合ですね。なので、基本情報処理試験に同じくらいですね。

学習時間、おすすめの学習教材

学習時間は完全未経験なら150時間、Linuxを触っている方なら50時間くらいだと思います。
おすすめの学習方法は、あずき本と呼ばれる教科書のLinux教科書とWeb版問題集Ping-tを交互にやれば、費用も安くておすすめです。過去問は本だと問題数が限られるので、Webサイトがおすすめですね。あとは、手を動かした方が知識が定着するので、環境構築して実際に動かしたいですね。環境構築は、ドットインストールのレッスン通りにやれば簡単に構築できます。
Linux教科書が難しくて訳わかんない方は、1週間でLPICの基礎が学べる本が読むとだいぶ理解が進みますよ。

LPICついてのまとめ

LPICの費用は高いですが、時間とお金を投資できるなら、体系的な知識を得られるのでおすすめす。ちなみにPing-tが申し込むと1,000円安くなるので、合計2,000円お得ですね。

参考サイト

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

vscodeのRemote Developmentで仮想環境にsshする

環境

  • デバイス:Mac
  • 仮想環境:Vagrant Ubuntu
  • エディタ:vscode

プラグイン

  • Remote Development

背景

  • vagrantでは共有フォルダが利用できるが、vscodeでササっと開発がしたかったため、リモートにsshできるプラグインを採用。

設定方法

1.Remote Developmentをインストール
vscodeのExtensionsのアイコンで検索し、インストールしてください。

2.ssh先の設定を確認
vagrantを起動するディレクトリで

$ vagrant ssh-config

こんな感じで表示される

  Host "ホスト名"
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/{USERNAME}/vagrant/ubuntu64_18/.vagrant/machines/default/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL

3..sshに設定を出力させた結果を記述

$ vagrant ssh-config >> ~/.ssh/config

4.vscodeで接続してみる
画面左下に表示される><をクリックするorコマンドパレットでRemote-SSH: Connect to Host
接続先のホスト名を選択し、接続が完了する。
5分もあればできるので、、、楽なのでオススメです( ´_ゝ`)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Supervisor入門

Supervisorとは

プロセスの制御・管理を行えるシステム。

具体的には、プロセスをデーモン化し、クラッシュした際の再起動などを行ってくれます。

例えば、私のアサインしているプロジェクトではLaravelのキューワーカーを使用し、プログラムを継続して並行稼働する際に重宝しています。

ただ、Windowsユーザーには残念ですが、UNIXライクなのでWindowsでは起動しません。

公式ドキュメント
http://supervisord.org/running.html#adding-a-program

この記事について

Supervisorの基本的な使い方について必要最小限の内容を書いていきます。

インストール

今回はAWSで適当に立ち上げたEC2インスタンス上で、実践していきます。

サーバーアクセス〜スーパーユーザー切り替え

...$ ssh -i ~/.ssh/udemy_sample2.pem ec2-user@54.65.141.153
[ec2-user@ip-172-31-37-208 ~]$ sudo su -

supervisorをインストール
詳しく調べていませんが、easy_installがいいらしいです。

[root@ip-172-31-37-208 ~]# sudo easy_install supervisor
Searching for supervisor
Reading https://pypi.python.org/simple/supervisor/
Downloading https://files.pythonhosted.org/packages/ca/1f/07713b0e1e34c312450878801d496bce8b9eff5ea9e70d41ff4e299b2df5/supervisor-4.1.0-py2.py3-none-any.whl#sha256=a76b2f77a560f2dc411c0254a4eb15f555e99faac48621b0f1fc9ab013944f47
Best match: supervisor 4.1.0
Processing supervisor-4.1.0-py2.py3-none-any.whl
Installing supervisor-4.1.0-py2.py3-none-any.whl to /usr/lib/python2.7/site-packages
writing requirements to /usr/lib/python2.7/site-packages/supervisor-4.1.0-py2.7.egg/EGG-INFO/requires.txt
Adding supervisor 4.1.0 to easy-install.pth file
Installing echo_supervisord_conf script to /usr/bin
Installing pidproxy script to /usr/bin
Installing supervisorctl script to /usr/bin
Installing supervisord script to /usr/bin

Installed /usr/lib/python2.7/site-packages/supervisor-4.1.0-py2.7.egg
Processing dependencies for supervisor
Finished processing dependencies for supervisor

構成ファイルの作成

[root@ip-172-31-37-208 ~]# echo_supervisord_conf > /etc/supervisord.conf

構成ファイルがetc配下に置かれます。

デーモン化するプログラムの追記(個別管理しない場合)

構成ファイルを個別管理しない場合はsupervisord.confに以下のようにデーモン化したいプログラムを追記してください。

supervisord.conf
[program:foo]
command=/bin/cat

デーモン化するプログラムの追記(個別管理する場合)

構成ファイルを個別管理する場合は以下の手順で進めてください。

個別のプログラム構成ファイル保管用ディレクトリ作成

[root@ip-172-31-37-208 ~]# mkdir /etc/supervisord.d

supervisord.confの修正

変更箇所(変更前)

supervisord.conf
;[include]
;files = relative/directory/*.ini

変更箇所(変更後)

supervisord.conf
[include]
files = /etc/supervisord.d/*.conf

これで、/etc/supervisord.d配下に作成する個別の構成ファイルも読み込むようになります。

個別のプログラム構成ファイル作成

[root@ip-172-31-37-208 ~]# vi /etc/supervisord.d/foo.conf

以下のように作成

foo.conf
[program:foo]
command=/bin/cat

使用するコマンドについて

supervisord

supervisorの起動に使用します。

プログラムの細かい操作等では使用しません。

supervisorctl

実行されたプログラムの操作で使用します。詳しい操作方法は以下URLを参照。

Supervisorの起動〜プログラムの実行

Supervisorを起動。

[root@ip-172-31-37-208 ~]# /usr/bin/supervisord -c /etc/supervisord.conf

/usr/bin/supervisordだけでも起動しますが、その場合は構成ファイルの場所を順番に検索しに行く為、cオプションを使用し、構成ファイルの絶対パスを指定した方がよさそうです。

構成ファイルのプログラム確認。

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
foo                              RUNNING   pid 29747, uptime 0:02:30

Supervisor起動時に構成ファイルに記述しているプログラムは自動で実行されるっぽいです。

試しにkill。

[root@ip-172-31-37-208 etc]# kill -9 29747
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
foo                              RUNNING   pid 29761, uptime 0:00:03

プロセスIDが変わり、再起動していることを確認。

プロセスを停止してみる。

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl stop foo
foo: stopped
[root@ip-172-31-37-208 ~]# /usr/bin/supervisorctl status
foo                              STOPPED   Mar 29 01:17 AM

プロセスが停止していることを確認。

プロセスを削除してみる。

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl remove foo
foo: removed process group
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
[root@ip-172-31-37-208 etc]#

プロセスがお亡くなりになられていることを確認。

新しいプログラムを追加し、フォアグラウンドで実行してみる。

supervisord.confに以下を追加

supervisord.conf
[program:foo2]
command=watch -n 1 `date`

構成ファイルを読み込み、プロセス開始

[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl reread
foo: available
foo2: available
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl add foo2
foo2: added process group
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl status
foo2                             RUNNING   pid 1177, uptime 0:00:04
[root@ip-172-31-37-208 etc]# /usr/bin/supervisorctl fg foo2
Every 1.0s: `date`                                      Sun Mar 29 04:24:25 2020

sh: Sun: command not found

フォアグラウンドでの実行を確認。

Ctl+Cで抜けられます。(もちろんプロセスはデーモン化されたまま)

コマンド一覧

よく使いそうなものを抜粋しました。

status

プロセスのステータスの状態を確認。

reread

構成ファイルの読み込み。

この段階ではプログラムは追加も削除もされない。

add <name>

構成ファイルに記述したプログラムの適用(プロセス開始)。

remove <name>

停止しているプロセスの削除。

restart <name>

プロセスの再起動。

これだけでは、構成ファイルの内容は読み込まれないので注意。

stop

プロセスの停止。

start

プロセスの開始。

update

構成ファイルの再読み込み、プログラムの再起動。

設定内容に変更のあったプログラムのみ再起動される?

reload

Supervisorのデーモンの再起動。

※詳しくは公式ドキュメント参照

まとめ

便利!!!!!

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む