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