気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

cron設定方法

1. 編集方法

crontabコマンドでcron設定を行います。

crontab [ -u ユーザ名 ] {-l | -r | -e }

optionは以下です。

-u:cronを設定するユーザーを指定
-l:cronを一覧で表示
-r:cronの設定を全消去
-e:cronを設定するエディタを起動する

コマンド実行ユーザー毎に設定が可能。
ユーザー指定なしではrootの設定を参照、編集することになる。

2. cron設定方法

2.1 cron設定エディタの起動

-uで指定ユーザーのcron設定を編集するエディタを起動する (-uオプションはroot のみ使用可)
rootのcron設定変更時は、-uオプションは不要。

crontab -u root -e

2.2 cron設定の記述方法

分 時 日 月 曜日 <実行コマンド>
指定方法 記述例 説明
固定指定 0 15 * * * echo "hello" 15時になる度にechoの文字列を表示
間隔指定 */5 * * * * echo "hello" 5分ごとに実行
複数指定 5,10 2 * * * echo "hello" 2時5分と2時10分に実行
範囲指定 5 2-4 * * * echo "hello" 2時5分と3時5分と4時5分に実行

様々な書き方の例を記載しておきます。

43 23 * * *               23:43に実行
12 05 * * *               05:12に実行
0 17 * * *                17:00に実行
0 17 * * 1                毎週月曜の 17:00に実行
0,10 17 * * 0,2,3         毎週日,火,水曜の 17:00と 17:10に実行
0-10 17 1 * *             毎月 1日の 17:00から17:10まで 1分毎に実行
0 0 1,15 * 1              毎月 1日と 15日と 月曜日の 0:00に実行
42 4 1 * *                毎月 1日の 4:42分に実行
0 21 * * 1-6              月曜日から土曜まで 21:00に実行
0,10,20,30,40,50 * * * *  10分おきに実行
*/10 * * * *              10分おきに実行
* 1 * * *                 1:00から 1:59まで 1分おきに実行
0 1 * * *                 1:00に実行
0 */1 * * *               毎時 0分に 1時間おきに実行
0 * * * *                 毎時 0分に 1時間おきに実行
2 8-20/3 * * *            8:02,11:02,14:02,17:02,20:02に実行
* 0,8-23 * * *             0時、8時~23時において1分毎に実行
30 5 1,15 * *             1日と 15日の 5:30に実行

分が「*」の場合、1分おきの実行となります。
複数形式と範囲形式を混ぜて記載することも可能。

Cron動作確認

# crond ログの確認
tail -f /var/log/cron

# crond が動いているかどうか
service crond status

/var/log/cron以下にログを出力していない場合、mail実行ログに実行結果が出ている場合があります。
こちらも合わせて確認すると、現状のcron実行状況を確認することができます。

$less /var/mail/user_name

From user@xxx.local  Sun Aug  5 09:22:11 2018
Return-Path: <user@xxx.local>
X-Original-To: user
Delivered-To: user@xxx.local
Received: by xxx.local (Postfix, from userid 501)
        id 30758FA554; Sun,  5 Aug 2018 09:22:01 +0900 (JST)
From: user@xxx.local (Cron Daemon)
To: user@xxx.local
Subject: Cron <user@xxx> echo "helo"
X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=user>
X-Cron-Env: <USER=user>
X-Cron-Env: <HOME=/Users/user>
Message-Id: <20180805002201.30758FA554@xxx.local>
Date: Sun,  5 Aug 2018 09:22:01 +0900 (JST)

helo

設定ファイルの読み込み

cron設定を記述したファイルを読み込むことで、cron設定できます。

echo '*/5 * * * * echo "hello"' > cron.conf
crontab cron.conf

crontabで-rオプションをつけて設定を全削除してしまう場合があります。 そのような場合に、設定ファイルを出力しておき、読み込むことで、すぐに復旧が可能です。

設定ファイルの実体の場所

バックアップする場合、以下のユーザー毎の設定を保存しておくと良いです。

/var/spool/cron/【ユーザー名】

カレントディレクトリにファイル属性をそのままで/var/spool/cron/以下をすべてコピー

sudo cp -pr /var/spool/cron/ .

cron実行でパス通ってなくてエラーになる場合

シェル内で実行するツールは、フルパス指定で記載するのが、望ましい。

他にもいろんな対処方法があるようですが、
一番シンプルなのは、crontab内でPATH定義する案。
必要なものだけ書いておくのが望ましいです。

PATH=/usr/local/bin:/usr/bin:/bin:

* * * * * echo "hello"

Linux suコマンド

ユーザー切り替え

# 「-」オプションはログイン・シェルを使用してユーザーを切り替える
# ユーザー指定なしの場合は、rootとなる
su - 

suとsudoの違い

ほぼできることは重複しているが、以下の違いがある。

su:切り替え先ユーザー(root)のパスワードが要求される sudo:sudoは元ユーザーのパスワードが要求される。/etc/sudoersで権限の細かい設定が可能

jQueryでcheckboxの全選択をシンプルに実装する

HTML

<ul>
    <li><label><input type="checkbox" id="all" /> Check all</label></li>
    <li><label><input type="checkbox" name="check" value="1" /> value 1</label></li>
    <li><label><input type="checkbox" name="check" value="2" /> value 2</label></li>
    <li><label><input type="checkbox" name="check" value="3" /> value 3</label></li>
    <li><label><input type="checkbox" name="check" value="4" /> value 4</label></li>
</ul>

jQuery

//全選択・全解除をクリックしたとき
$('#all').on('change', function() {

//チェックしたチェックボックスの状態を他のチェックボックスに反映
$('input[type=checkbox]').prop('checked', this.checked);
});

上記の場合、HTML上の全チェックボックスへ反映してしまうため、以下のように
範囲を絞って反映するとより安心感があります。

//全選択・全解除をクリックしたとき
$('#all').on('change', function() {

// idがupdateAreaの子要素のcheckboxにのみチェック状態を反映
$("'input[type=checkbox]'", "#updateArea").prop('checked', this.checked);
});

DDLのトランザクション(PostgresSQL,Oracle,MySQL)

PostgreSQL

CREATE TABLEやALTER TABLEなどのDDL命令も
COMMIT、ROLLBACKの対象になる

第1回 トランザクションについて

Oracle

DDLトランザクション対象にはならない。暗黙コミットされる。

oralce

以下引用

PostgreSQL では、CREATE TABLE や DROP TABLE などの DDL
トランザクションの一部となるため、トランザクションの途中で
DROP TABLE を実行した場合でも、最後に ROLLBACK すれば、DROP したテーブルが元に戻ります。

MySQL

DDLトランザクション対象にはならない。暗黙コミットされる。

MySQL

Appacheの設定をサービスを終了させずに反映する

confファイルの構文チェック

以下のいずれかで設定の記述間違いをチェックする。

apachectl configtest
service apache configtest
/usr/local/apache2/bin/httpd -t

設定反映

graceful

Apacheを終了せずに設定ファイルの読み直しを行う。
実行中のリクエスト処理を中止させたくない場合に用いるコマンド

/etc/init.d/httpd graceful

httpdは、/usr/sbin/httpdにあったりもします。

reload

Apacheを終了せずに設定ファイルの読み直しを行う。
実行中のリクエスト処理を中止させてもよい場合に用いるコマンド

/etc/init.d/httpd reload

「abc」という文字列を含まないパターンにマッチさせる

指定文字列が含まない文字列にマッチ

^(?!.*abc).+$

(?!abc)はabcを含む位置を示す。

^(?!abc).+$はabcという文字列で始まらない。

^(?!.*abc).+$となると、abcの前に任意の文字列を含む意味となり、abcを含まない文字列となる。

複数の指定文字列が含まない文字列にマッチ

^(?!.*(abc|xyz)).+$とするとabcまたはxyzを含まない文字列となる。