CloudWatch logsの時間表示UTCでちょっとつらいなーって思ってたけど、期間設定の1番右端の"カスタム"のタブからlocaltimeに変更できることを今気がついた。 pic.twitter.com/58KOVVxkcm
— masasuzu 🍶🐫 (@masasuz) March 15, 2017
こんなところにあった。。。 気がつかないよ。。。。
CloudWatch logsの時間表示UTCでちょっとつらいなーって思ってたけど、期間設定の1番右端の"カスタム"のタブからlocaltimeに変更できることを今気がついた。 pic.twitter.com/58KOVVxkcm
— masasuzu 🍶🐫 (@masasuz) March 15, 2017
こんなところにあった。。。 気がつかないよ。。。。
久しぶりにブログ書くな。
上記記事、これあんまりよくなくて、Ubuntu的にはこう変えるのが良い。
UbuntuTime - Community Help Wiki
echo "Asia/Tokyo" > /etc/timezone dpkg-reconfigure --frontend noninteractive tzdata
ただ、Ubuntu 16.04だとこれうまく変わってくれないので timedatectl
を使ってあげる必要がある。
timedatectl set-timezone Asia/Tokyo
こんな感じですね。
root@lab:~# timedatectl status Local time: Thu 2017-02-09 14:42:40 JST Universal time: Thu 2017-02-09 05:42:40 UTC RTC time: Thu 2017-02-09 05:42:40 Time zone: Asia/Tokyo (JST, +0900) Network time on: yes NTP synchronized: yes RTC in local TZ: no root@lab:~# timedatectl set-timezone Australia/Adelaide root@lab:~# timedatectl status Local time: Thu 2017-02-09 16:12:44 ACDT Universal time: Thu 2017-02-09 05:42:44 UTC RTC time: Thu 2017-02-09 05:42:44 Time zone: Australia/Adelaide (ACDT, +1030) Network time on: yes NTP synchronized: yes RTC in local TZ: no root@lab:~# timedatectl set-timezone Asia/Tokyo root@lab:~# timedatectl status Local time: Thu 2017-02-09 14:42:54 JST Universal time: Thu 2017-02-09 05:42:54 UTC RTC time: Thu 2017-02-09 05:42:54 Time zone: Asia/Tokyo (JST, +0900) Network time on: yes NTP synchronized: yes RTC in local TZ: no
MySQL :: MySQL 5.6 リファレンスマニュアル :: 6.1.2.1 パスワードセキュリティーのためのエンドユーザーガイドライン
ここの通りなんだけど。
簡単だけど、セキュアじゃないですね。コマンドラインヒストリーに残る場合もあるし。
-p
の後にスペースを入れないのがポイント
mysql -u USER -pPASSWORD
一般的な方法ですね。
mysql -u USER -p
~/.my.cnf
を作っておくとそこから設定を読み取ってくれます。パスワード情報は他のユーザから読み取られないようにパーミッションを気を付けておくと良いでしょう。
(でも平文のパスワードをファイルで保存するのは良い手ではないです。
cat > ~/.my.cnf <<... [client] user=USER password=PASSWORD ... chmod 600 .my.cnf mysql
この方法はpsコマンドでパスワードが他のユーザから見られてしまう可能性があるので基本的には使ってはいけません。
MYSQL_PWD=PASSWORD mysql -u USER
MySQLのエラーログを見てるとこんなこと言われるのですが、
2016-06-09T06:53:07.219882Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5010) 2016-06-09T06:53:07.219948Z 0 [Warning] Changed limits: max_connections: 214 (requested 1000) 2016-06-09T06:53:07.219954Z 0 [Warning] Changed limits: table_open_cache: 400 (requested 2000)
そんなときは、/lib/systemd/system/mysql.service
のservice
セクションにLimitNOFILE=65535
を足してあげて、下記の様に再起動してあげると良いです。
systemctl daemon-reload systemctl restart mysql
しかし、このwarnins、log_timestamps = system
ってmy.cnf
に入れておいてもUTCでタイムスタンプ出力するんですよね。。。。
Ubuntu16.04で入るMySQL5.7の設定ファイルがこんな感じになってるんですが、 どういう意図なんでしょうね?
MySQL的には読み込むファイルは/etc/mysql/my.cnf
だけど、Ubuntu開発チーム的には/etc/mysql/mysql.cnf
がいじって欲しいファイルってことなんですかね?
# ls -l /etc/mysql/my.cnf lrwxrwxrwx 1 root root 24 Jun 2 16:13 /etc/mysql/my.cnf -> /etc/alternatives/my.cnf # ls -l /etc/alternatives/my.cnf lrwxrwxrwx 1 root root 20 Jun 2 16:13 /etc/alternatives/my.cnf -> /etc/mysql/mysql.cnf # ls -l /etc/mysql/mysql.cnf -rw-r--r-- 1 root root 682 Apr 20 19:04 /etc/mysql/mysql.cnf
中身的にはこうなってるので、includeディレクトリをいじるのが素直だと思います。
!includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mysql.conf.d/
毎回忘れるのでメモを残す
-L
オプションを使うと良い
ps -efL
--sort
オプションを使うと良い。カラム名の前に-
を付けると降順になるデフォルト昇順。
ps auxwwww --sort=-%mem | head
最初に結論
hostname -I
を使うと良い
某所で、自ホストのIPアドレスを取得するためにこんなことをしている箇所を見つけたのが発端です。
LANG=C /sbin/ifconfig | grep 'inet addr' | awk '{print $2;}' | cut -d: -f2 | grep -v 127.0.0.1 | tail -n 1
もう少し、簡潔にできないかなー。(そもそもifconfigはもう使わない方が良いし) ip addr show eht0
とかでもデータ加工しないとだめだしな。とか考えてたら、hostname
でできそうだということが分かりました。
似たオプションで、-i
と-I
があるのですが、名前解決ができるかできないかの違いです。用途に合わせて使い分けましょう。
-i, --ip-address
Display the network address(es) of the host name. Note that this works only if the
host name can be resolved. Avoid using this option; use hostname --all-ip-addresses
instead.
-I, --all-ip-addresses
Display all network addresses of the host. This option enumerates all configured
addresses on all network interfaces. The loopback interface and IPv6 link-local
addresses are omitted. Contrary to option -i, this option does not depend on name res‐
olution. Do not make any assumptions about the order of the output.
LANG=C /sbin/ifconfig | grep 'inet addr' | awk '{print $2;}' | cut -d: -f2 | grep -v 127.0.0.1 | tail -n 1
闇感ある。
— masasuzu.lab (@masasuz) February 1, 2016
hostname -I | head -1
かなー。場合に依るけど。
— masasuzu.lab (@masasuz) February 1, 2016
hostname -I と hostname -i の違いを覚えた。
— masasuzu.lab (@masasuz) February 1, 2016
デーモン管理はUpstartでやっていて、Webアプリケーションサーバはwebapp-${project_name}
、ジョブワーカーはjobworker-${project_name
みたいな感じの名前で定義しています。
serviceコマンドはrootじゃないと実行出来ないのですが、デプロイのときなど、大量のサーバにいちいちパスワード打てないので、特定のユーザにNOPASSWORDで実行出来るようにします。
ただ、何も考えず/etc/sudoers
に設定していくとサブコマンド毎に指定していかないといけないのでなかなか辛いです。
app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_1 restart app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_1 reload app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_1 stop app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_1 start app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_2 restart app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_2 reload app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_2 stop app ALL=(root) NOPASSWD: /usr/bin/service webapp-project_2 start app ALL=(root) NOPASSWD: /usr/bin/service jobworker-project_1 restart app ALL=(root) NOPASSWD: /usr/bin/service jobworker-project_1 reload app ALL=(root) NOPASSWD: /usr/bin/service jobworker-project_1 stop app ALL=(root) NOPASSWD: /usr/bin/service jobworker-project_1 start
かといって、こうしてしまうと、全てのUpstart管理のデーモンをパスワード無しで操作出来てしまうのでかなり危険です。
app ALL=(root) NOPASSWD: /usr/bin/service
なんかうまい方法無いかなとsudoersのmanpageを引いていたらワイルドカードが使えるらしいので、こうしてみました。 これなら権限を絞りつつ、記述も簡潔になって良い感じです。
app ALL=(root) NOPASSWD: /usr/bin/service webapp-* * app ALL=(root) NOPASSWD: /usr/bin/service jobworker-* *
※ この記述あくまで一例だからこのまま使ってることを意味しないです。念為