ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
cron とは
cron は Unix 系 OS で指定時刻にコマンドを定期実行するための仕組みです。CentOS 7 では cronie パッケージが標準実装で、デーモンは crond、設定編集は crontab コマンドで行います。バックアップ、ログローテーション、定期バッチ、Let's Encrypt 自動更新など、ほぼ全 Linux サーバで稼働しています。
1. インストールと起動
# パッケージ確認・インストール (通常は導入済)
rpm -qa | grep cronie
sudo yum install -y cronie
# サービス起動・自動起動
sudo systemctl start crond
sudo systemctl enable crond
# 状態確認
sudo systemctl status crond
# Active: active (running) since ...
2. crontab の編集
# 現在のユーザー用 crontab を編集 (vi で開く)
crontab -e
# 一覧表示
crontab -l
# 全削除
crontab -r
# 別ユーザー用 (root のみ)
sudo crontab -u username -e
sudo crontab -u username -l
# EDITOR を変更したい場合
export EDITOR=nano
crontab -e
編集内容は /var/spool/cron/<username> に保存されますが、直接編集禁止。必ず crontab -e 経由で。
3. 書式 (5 フィールド + コマンド)
# 分 時 日 月 曜日 コマンド
#
# 分 : 0-59
# 時 : 0-23
# 日 : 1-31
# 月 : 1-12 (or jan-dec)
# 曜日 : 0-7 (0 と 7 は日曜、1=月, 2=火, ... 6=土) (or sun-sat)
# コマンド: 実行するコマンド
#
# 特殊文字:
# * 全部
# , 複数列挙
# - 範囲
# / 間隔
#
# 例:
0 3 * * * /usr/local/bin/backup.sh # 毎日 3:00
*/15 * * * * /usr/local/bin/poll.sh # 15 分おき
0 0 * * 0 /usr/local/bin/weekly.sh # 毎週日曜 0:00
0 9-18 * * 1-5 /usr/local/bin/business.sh # 平日 9-18 時の毎時 0 分
0 0 1 * * /usr/local/bin/monthly.sh # 毎月 1 日 0:00
30 2 * * * /usr/local/bin/maintenance.sh # 毎日 2:30
# 特殊な単語
@reboot /usr/local/bin/startup.sh # 起動時 1 回
@hourly (= 0 * * * *)
@daily (= 0 0 * * *)
@weekly (= 0 0 * * 0)
@monthly (= 0 0 1 * *)
@yearly (= 0 0 1 1 *)
4. ログ出力とエラー抑制
cron 自体のログ
# cron の実行履歴
sudo tail -f /var/log/cron
# 出力例
# Jun 11 03:00:01 hostname CROND[12345]: (root) CMD (/usr/local/bin/backup.sh)
# Jun 11 03:00:01 hostname crond[1234]: (CRON) info (RANDOM_DELAY ...
コマンドの出力をログ化
cron は標準出力・標準エラーをメール送信しようとします。サーバにメール設定が無いと「メール送信失敗」のエラーが大量に出ます。明示的にログファイルへリダイレクトするのが基本:
# 標準出力のみリダイレクト
0 3 * * * /path/to/cmd >> /var/log/myapp.log
# 標準出力 + 標準エラー両方
0 3 * * * /path/to/cmd >> /var/log/myapp.log 2>&1
# 出力捨てる (非推奨、エラー追えなくなる)
0 3 * * * /path/to/cmd > /dev/null 2>&1
# メール送信を抑制
MAILTO=""
0 3 * * * /path/to/cmd
# メール送信先を変更
MAILTO=admin@example.com
0 3 * * * /path/to/cmd
5. /etc/crontab と /etc/cron.d/
システム全体の cron は別の場所にも書けます:
| 場所 | 用途 | 書式 |
|---|---|---|
/var/spool/cron/<user> | ユーザー個人 | 5 フィールド + コマンド |
/etc/crontab | システム全体 | 5 フィールド + ユーザー名 + コマンド |
/etc/cron.d/ | パッケージごとの設定 (推奨) | システム書式 (ユーザー名付き) |
/etc/cron.hourly/ | 毎時実行スクリプト | 実行可能ファイルを置くだけ |
/etc/cron.daily/ | 毎日実行スクリプト | 同上 |
/etc/cron.weekly/ | 毎週実行スクリプト | 同上 |
/etc/cron.monthly/ | 毎月実行スクリプト | 同上 |
# /etc/cron.d/myapp の例 (ユーザー名フィールドあり)
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=""
# 分 時 日 月 曜日 ユーザー コマンド
0 3 * * * appuser /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1
*/5 * * * * appuser /usr/local/bin/health.sh
6. cron 利用の許可・拒否
# cron 利用を許可するユーザー (1 行 1 ユーザー)
sudo vi /etc/cron.allow
# foo
# bar
# cron 利用を拒否するユーザー
sudo vi /etc/cron.deny
# allow が存在すれば allow リストのみ許可
# allow が無く deny がある場合は deny 以外全員許可
# 両方無ければ root のみ (実装による)
7. SELinux 関連の落とし穴
CentOS 7 はデフォルトで SELinux Enforcing。cron 内のスクリプトが SELinux ポリシー違反で動かないことがあります。
# SELinux 状態確認
getenforce
# Enforcing (有効) / Permissive (警告のみ) / Disabled
# audit ログで cron の拒否を確認
sudo grep -i denied /var/log/audit/audit.log | grep cron
# 一時的に Permissive (検証用)
sudo setenforce 0
# 恒久的に Permissive にする場合 (/etc/selinux/config)
SELINUX=permissive
# ポリシー違反の対処は audit2allow でモジュール作成
sudo grep cron /var/log/audit/audit.log | audit2allow -M mycron
sudo semodule -i mycron.pp
8. 環境変数の落とし穴
cron はログインシェルとは別の環境で動きます。PATH がほぼ空、~/.bashrc は読まれません:
# ❌ cron では動かない (PATH に /usr/local/bin が無い)
0 3 * * * composer install
# ✅ フルパス指定
0 3 * * * /usr/local/bin/composer install
# ✅ または crontab 内で PATH 定義
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
0 3 * * * composer install
# ✅ スクリプト先頭で環境読み込み
0 3 * * * /bin/bash -lc '/usr/local/bin/myapp.sh'
# -l でログインシェルとして起動 → .bashrc / .profile 読込
9. Laravel scheduler との連携
Laravel では cron を 1 行だけ登録し、フレームワーク側で複数ジョブを管理する方式が主流:
# Laravel の scheduler を毎分起動
* * * * * cd /var/www/html && php artisan schedule:run >> /dev/null 2>&1// app/Console/Kernel.php
protected function schedule(Schedule $schedule): void
{
$schedule->command('backup:run')->daily()->at('03:00');
$schedule->command('queue:prune-failed')->weekly();
$schedule->job(new SendReports())->cron('0 9 * * 1-5'); // 平日 9:00
$schedule->call(fn () => Cache::flush())->hourly();
}
10. デバッグ・動作確認
# 構文チェック (crontab -e 終了時にも実行される)
crontab -l | crontab -
# 手動でスクリプトを cron 相当の環境で起動して動作確認
env -i HOME=$HOME LANG=$LANG bash -c '/path/to/script.sh'
# cron ログをリアルタイム監視
sudo tail -f /var/log/cron
# 次回実行予定 (cronie 1.5+)
# CentOS 7 は古いため非対応。crontab -l + 暗算で確認
# 1 分後に実行するテストエントリ
crontab -e
# (現在時刻 +1 分) * * * * echo "test" >> /tmp/cron-test.log
FAQ
Q: crontab -e 後どこに保存される?
A: /var/spool/cron/<username>。直接編集は避け、必ず crontab -e 経由で (構文チェックが入る)。
Q: 重複実行を避けたい
A: flock でファイルロック:
* * * * * flock -n /tmp/myjob.lock /path/to/myjob.sh
Q: 秒単位の精度で実行したい
A: cron は最短 1 分間隔。秒単位は systemd timer か常駐デーモン (Supervisor) を検討。
Q: コマンドが実行されない
A: ① /var/log/cron に実行ログがあるか確認 → ② 実行ログにあるのに動かない場合 PATH / 環境変数の問題 → ③ ログにも無い場合 crond サービス停止 / 構文エラー / cron.deny / SELinux を疑う。
Q: 標準のメール送信を止めたい
A: crontab 先頭に MAILTO="" または各行に 2>&1 でログ化。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
子ページはありません
- ディストリビューション
- コマンド一覧
- Linuxのサーバーに登録されているユーザの一覧を確認するコマンド
- リポジトリの一覧の確認
- エラー一覧
- ショートカットキー一覧
- ログを確認する便利なコマンド
- cronの導入と実行方法 (CentOS 7編)
- ディレクトリ内のファイル数を確認
- 複数ファイル内の文字列を一括置換する方法
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- IPv6とは|128bitアドレス・コロン16進表記/::省略・リンクローカル・SLAAC・デュアルスタック NEW 2026-06-22 12:34:44
- MAC アドレスフィルタリングの仕組みと限界 | ネットワーク入門 NEW 2026-06-22 12:19:10
- VPNとは|暗号トンネル・サイト間/リモートアクセス・IPsec/SSL-VPN/WireGuardを解説 NEW 2026-06-22 12:19:10
- WebRTC とは ブラウザ間 P2P の音声・映像・データ通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/2 とは 多重化・HPACK・バイナリフレーム | ネットワーク入門 NEW 2026-06-22 12:17:25
- Web通信プロトコル入門 HTTP/2・HTTP/3・WebSocket・gRPC・WebRTC | ネットワーク入門 NEW 2026-06-22 12:17:25
- gRPC とは HTTP/2 + Protocol Buffers の高速 RPC | ネットワーク入門 NEW 2026-06-22 12:17:25
- HTTP/3 (QUIC) とは UDP ベースの低遅延 Web 通信 | ネットワーク入門 NEW 2026-06-22 12:17:25
- WebSocket とは 全二重リアルタイム通信 ws/wss | ネットワーク入門 NEW 2026-06-22 12:17:25
- 証明書と認証局(CA)とは|X.509・信頼チェーン・DV/OV/EV・失効(CRL/OCSP)を解説 NEW 2026-06-22 12:17:24
- ファイアウォールとは|パケットフィルタ・ステートフル・DMZ・次世代FW(L4/L7)を解説 NEW 2026-06-22 12:17:24
- iptables/nftablesとは|テーブル・チェーン・ルール例・永続化をLinux視点で解説 NEW 2026-06-22 12:17:24
- HAProxy とは frontend/backend と設定例 | ネットワーク入門 NEW 2026-06-22 12:17:24
- CDN とは エッジキャッシュ・TTL・Cloudflare/CloudFront | ネットワーク入門 NEW 2026-06-22 12:17:24
- TLS/SSLの仕組み|ハンドシェイク・暗号スイート・前方秘匿性・証明書検証をわかりやすく解説 NEW 2026-06-22 12:17:24
コメントを削除してもよろしいでしょうか?