気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

Atomエディタ 初期設定

矩形選択ができるようにする

初期状態では矩形選択ができないため、Atomのパッケージ管理コマンドを用いて、
パッケージをインストールする。

インストール方法

$ apm install sublime-style-column-selection

Atomを再起動する。

使い方

Alt(Option)+ マウスを動かす(短形選択)

特に設定不要で簡単にできるようになりました。
サクラエディタはキーボードで選択できるが、こちらはマウス(トラックパッド)で選択しないといけない。。
でもわかりかし一般的なコマンドなので、忘れづらくて良いですね。

Unixの各種ログの意味(messages, cron, secure)

ログイン認証、メール送信ログなど様々な用途に応じて、様々な種類のログが存在します。 syslogなどのログ制御システムを介して出力する場合もあれば、プログラム自体が出力する場合もあります。

1. 一般的なログと格納先

ファイル名 用途 主な格納先 ログの出力元
cron cronの実行結果を保存 /var/log syslog
maillog メール関連 /var/log syslog
messages システムメッセージ、各種ソフト /var/log syslog
secure セキュリティ関連 /var/log syslog
access_log Apacheアクセスログ /var/log/httpd httpd
error_log Apacheのエラーログ /var/log/httpd httpd

ほとんどのアプリケーションは、syslogdを利用してログを出力しています。
syslogは、メールサーバプログラムのsendmail用に開発されたものだけど、広く浸透し、当たり前のように利用されている。
プログラム自体が出力するログとしては、WebサーバのApacheなどがある。

2. syslogの設定(syslog.conf)

各アプリケーションのログ設定は、/etc/syslog.confの値で決まります。 syslogdは、この設定ファイルを読み込みログを出力する。

2.1 syslog.conf

syslog.confのフォーマットは、「取得するログの指定」と「取得ログの出力先」の指定を行います。

*.info;mail.none;cron.none                              /var/log/messages

「取得するログの指定」は、facilityとpriorityから成ります。

facility(機能)

ログを出力する機能を指す。 auth,cron,ftp,mailなど

priority(重要度)

ログ出力の緊急度 emerg,alert,err,info,debug,noneなど

取得ログ出力先

どこに出力するかの指定 ファイル名, /dev/console, ユーザー, * など

3. syslog設定例

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;cron.none                              /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  /var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 *

・
・
・

Java8 LocalDateTimeと旧Dateの相互変換

Java8のLocalDateTimeからDateへの変換は思いのほか、骨が折れる。。
DBfluteのJava8対応で日時項目が、LocalDateTime型としてentity生成されているので、調べたがそもそも使わないというのもありかもしれない。。

LocalDateTimeからDateへの変換 その1

LocalDateTime ldt = LocalDateTime.now();
Date d = Date.from(ldt.toInstant(ZoneId.systemDefault().getRules().getOffset(ldt)));

LocalDateTimeからDateへの変換 その2

ZonedDateTimeを間に挟むやり方。見やすくはなる。

LocalDateTime ldt = LocalDateTime.now();
ZonedDateTime zdt = ldt.atZone(ZoneId.systemDefault());
Date rd = Date.from(zdt.toInstant());

DateからLocalDateTimeへの変換

DateからLocalDateTimeへの変換は次のように書けます。

Date d;
LocalDateTime ldt = LocalDateTime.ofInstant(d.toInstant(), ZoneId.systemDefault());

Maven プラグインが落とせない場合の確認ポイント

1. プラグイン取得先

プロキシ設定などがされている場合、人によって、プラグインが取得できない場合がある。

pom.xmlの通常設定

  <repositories>
    <repository>
      <id>central</id>
      <name>Maven2 Central Repository</name>
      <url>http://repo1.maven.org/maven2/</url>
    </repository>

上手くいかない場合は、以下のURLを試してみるとダウンロードできる場合がある。

      <url>https://repo.maven.apache.org/maven2/</url>

2. Mavenのクラスパス変数の設定

設定 ⇒ Java ⇒ ビルドパス ⇒ クラスパス変数 に「M2_REPO」が存在するかどうか確認
なければ、変数を追加する。

クラスパス変数:M2_REPO
パス:C:\Users\user_name.m2 ※mavenディレクトリを指定

3. プロキシの設定

基本的には、設定 ⇒ 一般 ⇒ ネットワーク接続におけるプロキシ設定が反映されています。

ただし、m2e, m2eclipseの場合は、追加の以下の設定が必要なようです。

設定場所
C:\Users\user_name.m2\settings.xml ※ファイルがなければ作成

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.1.0 http://maven.apache.org/xsd/settings-1.1.0.xsd">
  <proxies>
    <proxy>
      <id>http_proxy</id>
      <active>true</active>
      <protocol>http</protocol>
      <host>proxy.example.test</host>
      <port>12345</port>
    </proxy>
    <proxy>
      <id>https_proxy</id>
      <active>true</active>
      <protocol>https</protocol>
      <host>proxy.example.test</host>
      <port>12345</port>
    </proxy>
  </proxies>
</settings>

もし、エラーが発生する場合は、Mavenコマンドの update projectを実施すると解決する可能性があります。

MacでHome brewを用いて、MongoDBをインストール&初期設定

1. インストール手順

1.1 Home brewパッケージをアップデート

$ brew update

1.2 Mongo DBをインストー

$ brew install mongodb
==> Downloading https://homebrew.bintray.com/bottles/mongodb-3.4.4.yosemite.bottle.tar.gz
######################################################################## 100.0%
==> Pouring mongodb-3.4.4.yosemite.bottle.tar.gz
==> Caveats
To have launchd start mongodb now and restart at login:
  brew services start mongodb
Or, if you don't want/need a background service you can just run:
  mongod --config /usr/local/etc/mongod.conf
==> Summary
🍺  /usr/local/Cellar/mongodb/3.4.4: 18 files, 269.8MB

1.3 バージョン確認

$ mongo
MongoDB shell version v3.4.4

1.4 設定ファイル

/usr/local/etc/mongodb.conf

2. Mongo DBの起動

2.1 初期設定

データ格納ディレクトリの作成を行います。

$ sudo mkdir /var/lib/mongodb

ログファイル作成を行います。

$ sudo touch /var/log/mongodb.log

2.2 Mongo DBを起動

2.2.1 通常起動

先程作成した、データ格納ディレクトリとログファイルを指定します。

$ sudo mongod --dbpath /var/lib/mongodb --logpath /var/log/mongodb.log

2.2.2 バックグラウンド起動

--fork コマンドを付与して起動します。

$ sudo mongod --fork --dbpath /var/lib/mongodb --logpath /var/log/mongodb.log

停止する場合は、Mongoシェルより行う。

$mongo
> use admin
switched to db admin
> db.shutdownServer()
server should be down...

3. Mongo DBの自動起動設定

サービスを起動する。

$ brew services start mongodb
==> Successfully started `mongodb` (label: homebrew.mxcl.mongodb)

サービスリストを確認する。

$ brew services list
Name       Status  User   Plist
mongodb    started tezuka /Users/aaa/Library/LaunchAgents/homebrew.mxcl.mongodb.plist

自動起動設定の確認

$ ls -l ~/Library/LaunchAgents/
total 24
lrwxr-xr-x  1 aaa  staff   50 Jun  2 22:33 homebrew.mxcl.mongodb.plist -> /usr/local/opt/mongodb/homebrew.mxcl.mongodb.plist

サービスを停止する。

$ brew services stop mongodb
Stopping `mongodb`... (might take a while)
==> Successfully stopped `mongodb` (label: homebrew.mxcl.mongodb)

Oracle 前月初日と前月末日を取得する

前月初日

2ヶ月前の末日の次の日で求める。

select TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-2))+1)
from dual;

結果

2017-04-01

前月末日

1ヶ月前の末日で求める。

select TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE,-1)))
from dual;

結果

2017-04-30

cron設定方法

1. 編集方法

crontabコマンドでcron設定を行います。

crontab [ -u ユーザ名 ] {-l | -r | -e }

optionは以下です。

-u:cronを設定するユーザーを指定
-l:cronを一覧で表示
-r:cronの設定を全消去
-e:cronを設定するエディタを起動する

コマンド実行ユーザー毎に設定が可能。
ユーザー指定なしではrootの設定を参照、編集することになる。

2. cron設定方法

2.1 cron設定エディタの起動

-uで指定ユーザーのcron設定を編集するエディタを起動する (-uオプションはroot のみ使用可)
rootのcron設定変更時は、-uオプションは不要。

crontab -u root -e

2.2 cron設定の記述方法

分 時 日 月 曜日 <実行コマンド>
指定方法 記述例 説明
固定指定 0 15 * * * echo "hello" 15時になる度にechoの文字列を表示
間隔指定 */5 * * * * echo "hello" 5分ごとに実行
複数指定 5,10 2 * * * echo "hello" 2時5分と2時10分に実行
範囲指定 5 2-4 * * * echo "hello" 2時5分と3時5分と4時5分に実行

様々な書き方の例を記載しておきます。

43 23 * * *               23:43に実行
12 05 * * *               05:12に実行
0 17 * * *                17:00に実行
0 17 * * 1                毎週月曜の 17:00に実行
0,10 17 * * 0,2,3         毎週日,火,水曜の 17:00と 17:10に実行
0-10 17 1 * *             毎月 1日の 17:00から17:10まで 1分毎に実行
0 0 1,15 * 1              毎月 1日と 15日と 月曜日の 0:00に実行
42 4 1 * *                毎月 1日の 4:42分に実行
0 21 * * 1-6              月曜日から土曜まで 21:00に実行
0,10,20,30,40,50 * * * *  10分おきに実行
*/10 * * * *              10分おきに実行
* 1 * * *                 1:00から 1:59まで 1分おきに実行
0 1 * * *                 1:00に実行
0 */1 * * *               毎時 0分に 1時間おきに実行
0 * * * *                 毎時 0分に 1時間おきに実行
2 8-20/3 * * *            8:02,11:02,14:02,17:02,20:02に実行
* 0,8-23 * * *             0時、8時~23時において1分毎に実行
30 5 1,15 * *             1日と 15日の 5:30に実行

分が「*」の場合、1分おきの実行となります。
複数形式と範囲形式を混ぜて記載することも可能。

Cron動作確認

# crond ログの確認
tail -f /var/log/cron

# crond が動いているかどうか
service crond status

/var/log/cron以下にログを出力していない場合、mail実行ログに実行結果が出ている場合があります。
こちらも合わせて確認すると、現状のcron実行状況を確認することができます。

$less /var/mail/user_name

From user@xxx.local  Sun Aug  5 09:22:11 2018
Return-Path: <user@xxx.local>
X-Original-To: user
Delivered-To: user@xxx.local
Received: by xxx.local (Postfix, from userid 501)
        id 30758FA554; Sun,  5 Aug 2018 09:22:01 +0900 (JST)
From: user@xxx.local (Cron Daemon)
To: user@xxx.local
Subject: Cron <user@xxx> echo "helo"
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
X-Cron-Env: <USER=user>
X-Cron-Env: <HOME=/Users/user>
Message-Id: <20180805002201.30758FA554@xxx.local>
Date: Sun,  5 Aug 2018 09:22:01 +0900 (JST)

helo

設定ファイルの読み込み

cron設定を記述したファイルを読み込むことで、cron設定できます。

echo '*/5 * * * * echo "hello"' > cron.conf
crontab cron.conf

crontabで-rオプションをつけて設定を全削除してしまう場合があります。 そのような場合に、設定ファイルを出力しておき、読み込むことで、すぐに復旧が可能です。

設定ファイルの実体の場所

バックアップする場合、以下のユーザー毎の設定を保存しておくと良いです。

/var/spool/cron/【ユーザー名】

カレントディレクトリにファイル属性をそのままで/var/spool/cron/以下をすべてコピー

sudo cp -pr /var/spool/cron/ .

cron実行でパス通ってなくてエラーになる場合

シェル内で実行するツールは、フルパス指定で記載するのが、望ましい。

他にもいろんな対処方法があるようですが、
一番シンプルなのは、crontab内でPATH定義する案。
必要なものだけ書いておくのが望ましいです。

PATH=/usr/local/bin:/usr/bin:/bin:

* * * * * echo "hello"