aws#34 messagesとcronの代わり | 作業ログの部屋

作業ログの部屋

いろいろな作業ログを公開。何かの時に便利・・・かも。メモ代わりに。

AL2023 では、messages、cronがデフォルトでは使えない状態になっている。

これはベースOSがFedoraになったからということらしい。

まあ、Fedraは最新のものを試しているイメージがあるので、今後はこの形になるんだろうということで、rsyslogを動かしたり、cronieを動かすようなことはせずに、既存の環境でできる方法を探してみる。

 

■messages

参考:https://note.com/hiroyu0510/n/n02e530fd609d

ログを確認するには、

$ sudo journalctl

と実行すればよいようだ。
これまではテキストログをcatやtailで参照していたものが、これに変わる感じ。

tailのような使い方には、

$ sudo journalctl -f

/var/log/secureもでなくなってるけど、sshのログを確認するには、

$ sudo journalctl -u sshd

単純なテキストではなく、コマンドで加工などができるのはメリットがあるかもしれない。
バックアップとか、ローテーションとかはどうなるのかな?


■cron

参考:https://iret.media/95955

systemd timer というのを使うのか。

hogehoge.service
hogehoge.timer



/etc/systemd/system
に配置するのかな?


hogehoge.serviceは、
下記項目をそれぞれ記述するらしい

[Unit]
Description=(説明) 説明文を設定。スペースも使用可能
[Service]
ExecStart=(起動コマンド) 起動させたいコマンドを設定
User=(起動ユーザー名) 起動するユーザーを設定
WorkingDirectory=(ディレクトリ名) 起動するコマンドの実行ディレクトリを設定


hogehoge.timerは、
下記項目をそれぞれ記述するらしい

[Unit]
Description=(説明) 説明文を設定。スペースも使用可能
[Timer]
OnCalendar=(スケジュール) 定期実行スケジュールを設定
※cronのフォーマットとは違うので注意 (*-*-* 00:00:00で毎日になるらしい)
詳しくは man コマンドで man systemd.time.7 でマニュアルを参照のこと
[Install]
WantedBy=timers.target ※timers.target のインストールによりタイマー起動の設定を行う


これまで、日経平均株価を取得するコマンドを1日1回実行していたので、それを動かしてみる。
実行するコマンドはget_nikkeikabu.shとしてまとめたシェルを作成してそれを定期実行するイメージ。

# 設定ファイルを作成する
/etc/systemd/system 配下なので、sudoを付けて、nanoを起動して下記内容のファイルをそれぞれ作成した。
$ cd /etc/systemd/system
$ sudo nano getNikkeiheikin.service


[Unit]
Description=get Nikkei heikin stock rate.
[Service]
ExecStart=/home/ec2-user/get_nikkeikabu.sh
User=ec2-user
WorkingDirectory=/home/ec2-user



$ sudo nano getNikkeiheikin.timer

[Unit]
Description=get Nikkei heikin stock rate.
[Timer]
OnCalendar=*-*-* 16:00:00
[Install]
WantedBy=timers.target



#起動
の前に状態を確認してみます。

 

$ systemctl status getNikkeiheikin.timer
○ getNikkeiheikin.timer - get Nikkei heikin stock rate.
     Loaded: loaded (/etc/systemd/system/getNikkeiheikin.timer; disabled; preset: disabled)
     Active: inactive (dead)
    Trigger: n/a
   Triggers: ● getNikkeiheikin.service

$ systemctl start getNikkeiheikin.timer
Failed to start getNikkeiheikin.timer: Access denied
See system logs and 'systemctl status getNikkeiheikin.timer' for details.

まあ、そうだよね。sudoつけて実行します。


$ sudo systemctl start getNikkeiheikin.timer

何も出力されません。


$ systemctl status getNikkeiheikin.timer
● getNikkeiheikin.timer - get Nikkei heikin stock rate.
     Loaded: loaded (/etc/systemd/system/getNikkeiheikin.timer; disabled; preset: disabled)
     Active: active (waiting) since Fri 2024-06-21 14:27:58 JST; 14s ago
    Trigger: Fri 2024-06-21 16:00:00 JST; 1h 31min left
   Triggers: ● getNikkeiheikin.service

Jun 21 14:27:58 ip-172-31-44-142.ap-northeast-1.compute.internal systemd[1]: Started getNikkeiheikin.timer - >

 

動いたのかな?毎日16時に動かすようにしたので、結果を待ちたいと思います。

上手くいっていればログを出力するので。

 

16時を過ぎたので、journalで確認してみました。

 

$ journalctl | grep kabu
Jun 21 16:00:25 ip-172-31-44-142.ap-northeast-1.compute.internal (ikabu.sh)[36959]: getNikkeiheikin.service: F
ailed to locate executable /home/ec2-user/get_nikkeikabu.sh: Permission denied
Jun 21 16:00:25 ip-172-31-44-142.ap-northeast-1.compute.internal (ikabu.sh)[36959]: getNikkeiheikin.service: F
ailed at step EXEC spawning /home/ec2-user/get_nikkeikabu.sh: Permission denied

 

orz。権限がなくて実行できていませんでした。

 

ExecStart=/home/ec2-user/get_nikkeikabu.sh
 

としているので、シェルに実行権限を付けないといけないわけですが、そもそもbash~で指定して実行予定だったので、

 

ExecStart=bash /home/ec2-user/get_nikkeikabu.sh
 

としてみました。コマンドパラメータが有効かわかりませんが。

時間を16:30に変更して

 

sudo systemctl restart getNikkeiheikin.timer

 

したところ、


Warning: The unit file, source configuration file or drop-ins of getNikkeiheikin.timer changed on disk. Run 's
ystemctl daemon-reload' to reload units.

 

とでたので、言われるがままに、

 

$ sudo systemctl daemon-reload

 

確認すると
 

$ systemctl status getNikkeiheikin.timer
● getNikkeiheikin.timer - get Nikkei heikin stock rate.
     Loaded: loaded (/etc/systemd/system/getNikkeiheikin.timer; disabled; preset: disabled)
     Active: active (waiting) since Fri 2024-06-21 16:20:53 JST; 33s ago
    Trigger: Fri 2024-06-21 16:30:00 JST; 8min left
   Triggers: ● getNikkeiheikin.service

 

で16:30実行になってました。

 

しかし、だめでした。しかたないので、シェルに実行権限を付けます。.timerの時間も17時にして

 

$ chmod 744 /home/ec2-user/get_nikkeikabu.sh

$ sudo systemctl daemon-reload

 

restartは不要で、daemon-reloadだけでよさそうです。

 

その後もエラーでうまくいきません。

 

journalには、下記のようなログが

$ journalctl | grep nik
Jun 21 16:00:25 ip-172-31-44-142.ap-northeast-1.compute.internal (ikabu.sh)[36959]: getNikkeiheikin.service: Failed to locate executable /home/ec2-user/get
nikkeikabu.sh: Permission denied
Jun 21 16:00:25 ip-172-31-44-142.ap-northeast-1.compute.internal (ikabu.sh)[36959]: getNikkeiheikin.service: Failed at step EXEC spawning /home/ec2-user/get
_nikkeikabu.sh: Permission denied
Jun 21 16:20:53 ip-172-31-44-142.ap-northeast-1.compute.internal (ikabu.sh)[37585]: getNikkeiheikin.service: Failed to locate executable /home/ec2-user/get
nikkeikabu.sh: Permission denied
Jun 21 16:20:53 ip-172-31-44-142.ap-northeast-1.compute.internal (ikabu.sh)[37585]: getNikkeiheikin.service: Failed at step EXEC spawning /home/ec2-user/get
_nikkeikabu.sh: Permission denied
Jun 21 17:00:25 ip-172-31-44-142.ap-northeast-1.compute.internal audit[38748]: AVC avc:  denied  { execute } for  pid=38748 comm="(ikabu.sh)" name="get_nikk
eikabu.sh" dev="xvda1" ino=10497339 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=1
Jun 21 17:00:25 ip-172-31-44-142.ap-northeast-1.compute.internal audit[38748]: AVC avc:  denied  { read open } for  pid=38748 comm="(ikabu.sh)" path="/home/
ec2-user/get_nikkeikabu.sh" dev="xvda1" ino=10497339 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=1
Jun 21 17:00:25 ip-172-31-44-142.ap-northeast-1.compute.internal audit[38748]: AVC avc:  denied  { execute_no_trans } for  pid=38748 comm="(ikabu.sh)" path=
"/home/ec2-user/get_nikkeikabu.sh" dev="xvda1" ino=10497339 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=1
Jun 21 17:00:25 ip-172-31-44-142.ap-northeast-1.compute.internal audit[38748]: AVC avc:  denied  { ioctl } for  pid=38748 comm="get_nikkeikabu." path="/home
/ec2-user/get_nikkeikabu.sh" dev="xvda1" ino=10497339 ioctlcmd=0x5401 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tcl
ass=file permissive=1
Jun 21 17:00:25 ip-172-31-44-142.ap-northeast-1.compute.internal audit[38748]: AVC avc:  denied  { read } for  pid=38748 comm="get_nikkeikabu." name="python
3" dev="xvda1" ino=3496003 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file permissive=1
Jun 21 17:00:25 ip-172-31-44-142.ap-northeast-1.compute.internal audit[38751]: AVC avc:  denied  { append } for  pid=38751 comm="get_nikkeikabu." name="get
nikkei_heikin.log" dev="xvda1" ino=1049 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=1
Jun 21 23:04:15 ip-172-31-44-142.ap-northeast-1.compute.internal audit[48205]: AVC avc:  denied  { execute } for  pid=48205 comm="(ikabu.sh)" name="get_nikk
eikabu.sh" dev="xvda1" ino=10497339 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=1
Jun 21 23:04:15 ip-172-31-44-142.ap-northeast-1.compute.internal audit[48205]: AVC avc:  denied  { read open } for  pid=48205 comm="(ikabu.sh)" path="/home/
ec2-user/get_nikkeikabu.sh" dev="xvda1" ino=10497339 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissi
ve=1
Jun 21 23:04:15 ip-172-31-44-142.ap-northeast-1.compute.internal audit[48205]: AVC avc:  denied  { execute_no_trans } for  pid=48205 comm="(ikabu.sh)" path=
"/home/ec2-user/get_nikkeikabu.sh" dev="xvda1" ino=10497339 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file p
ermissive=1
Jun 21 23:04:15 ip-172-31-44-142.ap-northeast-1.compute.internal audit[48205]: AVC avc:  denied  { ioctl } for  pid=48205 comm="get_nikkeikabu." path="/home
/ec2-user/get_nikkeikabu.sh" dev="xvda1" ino=10497339 ioctlcmd=0x5401 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tcl
ass=file permissive=1
Jun 21 23:04:15 ip-172-31-44-142.ap-northeast-1.compute.internal audit[48205]: AVC avc:  denied  { read } for  pid=48205 comm="get_nikkeikabu." name="python
3" dev="xvda1" ino=3496003 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=lnk_file permissive=1
Jun 21 23:04:15 ip-172-31-44-142.ap-northeast-1.compute.internal audit[48206]: AVC avc:  denied  { append } for  pid=48206 comm="get_nikkeikabu." name="get
nikkei_heikin.log" dev="xvda1" ino=1049 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=1
 

これはSELinuxとか関係してる???

 

SELinuxを無効にすることで、無事動作しました。これが原因なのかな?

 

■SELinuxを無効化
$ getenforce
Permissive
$ sudo grubby --update-kernel ALL --args selinux=0
$ getenforce

Permissive
$ sudo reboot

$ getenforce
Disabled