パッケージの更新に合わせて再起動する
サーバーのパッケージを最新の状態にするため、パッケージ更新&再起動スクリプトを作成しました。
DNF パッケージが存在する場合に、更新して自動的に再起動するスクリプト
「/usr/local/bin/dnfAutoReboot.py」
!/usr/bin/env python
import subprocess
import os
import sys
# DNF でチェックを行い更新があれば更新後に再起動する。
if __name__ == '__main__':
# スーパーユーザーかどうか?
if os.getuid() != 0:
print('This program is only for super user.', file=sys.stderr)
exit(1)
# 更新チェック
dnf_args = ['dnf', 'check-update']
return_code = subprocess.run(dnf_args).returncode
if return_code == 0:
# 更新なし
exit(0)
elif return_code != 100:
# エラー
print('subprocess error : ' + str(dnf_args) + 'return code is ' + str(return_code), file=sys.stderr)
exit(return_code)
# 更新あり(更新作業)
dnf_args = ['dnf', 'update', '-y', '--refresh', '--best', '--allowerasing']
return_code = subprocess.run(dnf_args).returncode
if return_code != 0:
# エラー
print('subprocess error : ' + str(dnf_args) + 'return code is ' + str(return_code), file=sys.stderr)
exit(return_code)
# システムの再起動
reboot_args = ['systemctl', 'reboot']
return_code = subprocess.run(reboot_args).returncode
exit(return_code)
「/etc/crontab」毎日の深夜1時に実行
SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root # For details see man 4 crontabs # Example of job definition: # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * user-name command to be executed 0 1 * * * root dnfAutoReboot.py