- 投稿日:2021-01-16T20:38:48+09:00
termuxアプリでlinux
アンドロイドアプリtermuxを使うとlinuxコマンドが打てるので使ってみた。
まず最初にこれ打っておくと使いやすくなる。
termux-setup-storage□できたこと
・apt get update
・apt get upgrade
・pip install --upgrade pip
・pip install pandas
・pip install numpy
・pip install matplotlib
□できなかったこと
・pip install tkinter
下記が参考になる。
https://www.google.com/amp/s/www.lisz-works.com/entry/termux-init%3famp=1
- 投稿日:2021-01-16T17:26:37+09:00
Synology DSMのタスクスケジューラーでpython実行時に起こるインポートエラーの回避方法
起こったエラー
Synology の DS118 内にあるPythonのスクリプトを、DSM のタスクスケジューラーから実行しようとしたところ、モジュールのインポートエラーが起きました。
DSMから届いたメールに記載されたエラーTraceback (most recent call last): File "hoge.py", line 1, in <module> import tweepy ModuleNotFoundError: No module named 'tweepy'おかしいぞ?
SSH接続ではできるのに。。しかもこれ、以前
requests
でも同様のエラーに遭ってしまいましたが、その時はそれほどタスクスケジューラーでやる必要性がなかったことから、放置していました。
ですが今回はタスクスケジューラーでやる必要があったので、本腰を入れて対処してみることに。分からないなりに調べると、パスが通ってない感じに思え。
おそらく、SSHで実行するのとタスクスケジューラーで実行するのと、微妙に異なるのでしょう。というわけで、以下の通り対処してみました。
なお、pythonはパッケージセンターからインストールしてあってバージョンは
3.8.2
、SDKのバージョンはDSM 6.2.3-25426 Update 3
です。パスの確認
SSH接続とタスクスケジューラーの各々から、以下のコードを実行してパスのリストに差があるか確認します。
check_module_path.pyimport sys path_list = sys.path with open('/your_storage/your_directory/check_module_path.txt', 'w', encoding='utf-8') as f: for path in path_list: f.write(path + '\n')SSH接続から実行した場合
SSH接続から実行した場合のパス/my_storage/my_directory /var/packages/py3k/target/usr/local/lib/python38.zip /var/packages/py3k/target/usr/local/lib/python3.8 /var/packages/py3k/target/usr/local/lib/python3.8/lib-dynload /var/services/homes/synology_user_name/.local/lib/python3.8/site-packages /var/packages/py3k/target/usr/local/lib/python3.8/site-packages /usr/lib/python3/site-packagesタスクスケジューラーから実行した場合
タスクスケジューラーから実行した場合のパス/my_storage/my_directory /var/packages/py3k/target/usr/local/lib/python38.zip /var/packages/py3k/target/usr/local/lib/python3.8 /var/packages/py3k/target/usr/local/lib/python3.8/lib-dynload /var/packages/py3k/target/usr/local/lib/python3.8/site-packages /usr/lib/python3/site-packagesう~~ん、、
/var/services/homes/synology_user_name/.local/lib/python3.8/site-packages
が、SSH接続にはあってタスクスケジューラーにはないですね。
ここにtweepy
やrequests
のモジュールがいそうですので、SSH接続からこのディレクトリ内をls -l
で確認してみます。ls -l /var/services/homes/synology_user_name/.local/lib/python3.8/site-packages # 略(多数) # drwxrwxrwx+ 3 synology_user_name users 4096 Jan 14 05:57 tweepy # 略(多数)
tweepy
ありました!
もちろん、requests
もありました!対処方法
対処方法は、二つあります。
一つ目は、スクリプト内に2行ほどコードを加える方法で、こちらの方が簡単。
もちろん私は、迷ったら簡単な方を選ぶ怠惰なやつです。。二つ目は、タスクスケジューラーからデフォルトのパスを通す方法。
おそらくこちらで対処すべきなんでしょうけど、私のレベルではやり方が分からず。。
でも、とりあえず書くだけ書いておきます。スクリプト内で対処する方法
以下のコードを、モジュールのimport文の前に記述します。
モジュールのimport文の前に記述!import sys sys.path.append('/var/services/homes/synology_user_name/.local/lib/python3.8/site-packages')これだけで、エラー回避ができます!
分かると簡単なのですが、分かるまでが大変ですよね、こいういうのって。タスクスケジューラーからデフォルトのパスを通す方法
パスを通すには、
~/.bashrc
からvi
等のエディタで以下を追記すればいいのかもなのですが、これをタスクスケジューラー上でやるのってどうすればいいのか分からず。。export PATH=$PATH:"/var/services/homes/synology_user_name/.local/lib/python3.8/site-packages"タスクスケジューラーのスクリプトの中で、
vi
ってできるんですかね??
ご存じの方いらっしゃいましたら、ご教示いただけますとありがたいですm(_ _)m参考
Pythonでimportの対象ディレクトリのパスを確認・追加(sys.pathなど) | note.nkmk.me
【Python環境構築】環境変数について解説! | WEBCAMP NAVI
pythonのパッケージの保存場所 - Qiita
Python内のデフォルトパスを通す方法(Windows, Linux) - Qiita
- 投稿日:2021-01-16T15:29:18+09:00
サーバー移管に伴う、Let's Encryptにて発行したSSL証明書の使い回しをしてみた
前提
今回サーバーA(以降、旧サーバー)からサーバーB(以降、新サーバー)へお引っ越しをする機会があり、
旧サーバーで使用していたSSL証明書を、新サーバーへ持っていきそのまま使用したかったため、以下を参考にやってみた。
以下手順であれば一瞬でもSSL化が解除されることはなくなり、安心・安全にサーバー移管可能かと思う。環境
- conoha VPS → conoha VPS
- お名前.comにて発行したドメイン(そのまま・IPアドレスの紐付けだけ変更)
- centos7 → centos7
手順
まずは旧サーバーへsshログイン
(基本的に Let's Encrypt にて発行した証明書は、/etc/letsencrypt/
にある。)
letsencrypt
ディレクトリ丸ごと圧縮する。旧サーバー$ zip -ry letsencrypt.zip /etc/letsencrypt # または $ tar zcvf letsencrypt.tar.gz /etc/letsencrypt圧縮したファイルを新サーバーへリストア後、sshログイン。
Let’s Encrypt ユーザーガイドに従ってCertbotクライアントをインストールする。
新サーバー$ sudo yum -y install epel-release $ sudo yum -y install certbot $ sudo curl https://dl.eff.org/certbot-auto -o /usr/bin/certbot-auto $ sudo chmod 700 /usr/bin/certbot-auto次にリストアした圧縮ファイルを解凍する。
解凍場所は/etc
。新サーバー$ zip -ry letsencrypt.zip /etc/letsencrypt # または $ tar zcvf letsencrypt.tar.gz /etc/letsencryptドメインのIP紐付け変更
ここまで出来たらドメインの付け替えを実施。
各種サーバー会社の手順に従い、AレコードやTXTレコード、ネームサーバーの変更を行う。
今回は以下を参考にした。最後に証明書の更新を実施しwebサーバーを更新。
新サーバー$ certbot-auto renew $ systemctl restart httpd※必要に応じて
cron
にて証明書の自動更新設定をしておく。# 以下は、毎月1日の午前4時に自動更新をするcron # certbot-auto で証明書を更新し、apacheを再起動 # [webroot]の設定を忘れないこと $ crontab -e 00 04 01 * * certbot-auto renew --force-renew --webroot-path /var/www/html/[webroot] --post-hook "systemctl reload httpd"
- 投稿日:2021-01-16T15:17:08+09:00
Linux ファイルのパーミッション
パーミッションとは
このファイルまたはディレクトリに対して、
- どのユーザーが
- どういった操作ができるか
といった権限のことです。
見方
# 例 $ ls -la -rwxr-xr-x 1 root root ...パーミッションは9つの文字列で表され、先頭から3文字区切り(
rwx/r-x/r-x
)
でぞれぞれ意味を成します。
具体的には、
- 1~3文字(rwx) -> ファイル所有者の権限
- 4~6文字(r-x) -> 同グループに所属しているユーザーに対する権限
- 7~9文字(r-x) -> それ以外のユーザーに対しての権限
といった意味があります。
ちなみに一番最初にある-
はファイルを指し、d
であればディレクトリ、l
であればシンボリックリンクを意味します。$ ll # ファイル -rwxr-xr-x 1 root root ... # ディレクトリ drwxr-xr-x 1 root root ... # シンボリックリンク lrwxr-xr-x 1 root root ...各文字の意味
r
-> Read 読み取り権限
w
-> Write 書き込み権限
x
-> Execute 実行権限
-
-> 権限なし改めて最初の例を見てみる
# 例 $ ls -la -rwxr-xr-x 1 root root ...各文字の意味を理解したところで、最初の例を改めて見てみると以下のような意味になります。
- rwx(ファイル所有者の権限) -> 読み取り権限、書き込み権限、実行権限全て持っている
- r-x(同グループに所属しているユーザーに対する権限) -> 書き込み権限はないが、読み取り権限と実行権限を持っている
- r-x(それ以外のユーザーに対しての権限) -> 書き込み権限はないが、読み取り権限と実行権限を持っている
数値で表す
権限を変更する際には権限を数値で指定します。
# 例 $ chmod 777 hoge.txt早速ですが以下が数値と権限の対応表です。
数値 2進数 権限 0 000 --- 1 001 --x 2 010 -w- 3 011 -wx 4 100 r-- 5 101 r-x 6 110 rw- 7 111 rwx 数値と権限だけだと覚えにくいので2進数も載せています。
2進数でみると、
0
が権限なしの-
1
が権限あり
となり、数値で見るよりもわかりやすいです。そして、この表を見ながら例を見てみると
$ chmod 777 hoge.txt777( = rwxrwxrwx)となるので
全てのユーザーに全ての操作(読み取り、書き込み、実行)ができるようにするといった意味になります。最後に
インフラ担当でもない限り、普段のエンジニアリングでファイル権限を操作することってあまりないと思います。
ですがDockerとか触っているとファイル権限によって意図しないエラーが出たりすることも。。。
で、rw-r--r--
ってどういう意味だったっけ??となりがちですよね(主に私ですが)。
そういった時に少しでもお役に立てれば幸いです。最後まで読んでいただきありがとうございました。
- 投稿日:2021-01-16T15:00:43+09:00
CloudWatchにロードアベレージを追加する
背景
CloudWatchを使用しEC2のロードアベレージの監視をしようとしたが現状ロードアベレージのメトリクスは標準で用意されていないので自分でカスタムを作成しないといけないとのこと。。。
なので面倒くさいが自分でスクリプトを書いてCloudWatchから監視できるようにしました!
ロードアベレージとは
ロードアベレージはシステム全体の負荷状況を表す指標であり
1CPUにおける単位時間あたりの実行待ちとディスクI/O待ちのプロセスの数で表される。簡単にまとめるとコンピューターシステムが実行している作業量のことです。
さっそく
■まずEC2にCloudWatchAgentServerPolicyのロールを作成しアタッチする。
sshログインをして$ vi /home/ec2-user/loadaverage.sh
#!/bin/bash ## AWS CLI設定 readonly AWS_CLI="/usr/bin/aws" readonly AWS_CLI_REGION="ap-northeast-1" ## メトリックス名と単位の設定 metric_name="LoadAverage-EC2" name_space="AmazonLinux/${metric_name}" unit="Percent" #unit="Count" ## ロードアベレージを取得する自分の環境に合わす ## uptimeコマンドで出てくる最初の数字を取得できるように変える(10~12くらい?) load_average=`uptime | tr -s ' ' | cut -d ' ' -f 11 | cut -d ',' -f 1` ## AWS CloudWatchのカスタムメトリクスにロードアベレージを追加する ${AWS_CLI} cloudwatch --region ${AWS_CLI_REGION} put-metric-data --metric-name `hostname -s`/${metric_name} --namespace ${name_space} --value ${load_average} --unit ${unit}:wq
■権限付与
$ chmod 755 /home/ec2-user/loadaverage.sh■cloudwatchへメトリクス送信
$ /home/ec2-user/loadaverage.sh■EC2インスタンスのロードアベレージをCloudWatchに5分おきに記録する
$ crontab -e
*/5 * * * * /home/ec2-user/loadaverage.sh参考記事
・https://qiita.com/na0AaooQ/items/1fedb1d0136cd78c6aa1
・https://qiita.com/ryuichi1208/items/3b21aee6c38bcfdb12b1
- 投稿日:2021-01-16T12:08:12+09:00
Linux【シェルコマンド】
はじめに
これは学習用のメモになります。
今回はよく使うシェルコマンド(ショートカットキー)を学習していきます。カーソル移動
コマンド 内容 Ctrl+f 1文字次へ移動 Ctrl+b 1文字前へ移動 Ctrl+a 行の先頭に移動 Ctrl+e 行の最後に移動 Meta+f(esc+f) 一単語次へ移動 Meta+b(esc+b) 一単語前へ移動 文字列の編集
コマンド 内容 Ctrl+h カーソルの左1文字削除 Ctrl+d カーソル部分を1文字削除 Ctrl+w カーソル位置の単語を削除(カーソルの前の部分) Ctrl+u カーソルの位置から行頭まで削除 Ctrl+k カーソルの位置から行末まで削除 Ctrl+y 最後に削除した内容を挿入 トラブル時の対応
コマンド 内容 Ctrl+c 実行中のコマンドを強制終了 Ctrl+l 画面の消去。文字化けしたときのクリアにも使える Ctrl+s 画面表示のロック(キーボードから文字の入力を受け付けない) Ctrl+q 画面表示のロックを解除 補完・コマンド履歴
コマンド 内容 Tab コマンドやパスの補完 Ctrl+p、または↑キー 一つ前の履歴を見る Ctrl+n、または↓キー 一つ後の履歴を見る Ctrl+r コマンド履歴のインクリメンタル検索
- 投稿日:2021-01-16T01:54:25+09:00
DockerのVolumeを全て削除する
docker volume ls | awk '{print $2}' | xargs docker volume rm