私はCentOS 7を使用しており、私の目標は5秒ごとにcronを作成することです。しかし、私が調査したところによると、cronは1分間しか使用できないので、今やりたいことはシェルファイルを作成することです。
打つ
while sleep 5; do curl http://localhost/test.php; done
しかし、右クリックして手動でクリックしました。
私が望むのは、このファイルのサービスを作成して自動的に起動および停止できるようにすることです。
見つけました。サービス生成スクリプト
#!/bin/bash
# chkconfig: 2345 20 80
# description: Description comes here....
# Source function library.
. /etc/init.d/functions
start() {
# code to start app comes here
# example: daemon program_name &
}
stop() {
# code to stop app comes here
# example: killproc program_name
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
# code to check status of app comes here
# example: status program_name
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
ところで、startメソッドやstopメソッドに何を書くべきかわからないので、hit.shのような内容を入れてみましたが、start(){}
stopメソッドでエラーが発生しました。}
答え1
最新のシステムでスクリプトをデーモンとして実行するユーザーは、次のものを使用する必要がありますsystemd
。
[Unit]
Description=hit service
After=network-online.target
[Service]
ExecStart=/path/to/hit.sh
[Install]
WantedBy=multi-user.target
別の名前で保存してから、などを/etc/systemd/system/hit.service
使用して起動/停止/有効化/無効化することができます。systemctl start hit
2015年の古い回答:
コード例を再利用するには、次のようにします。
#!/bin/bash
case "$1" in
start)
/path/to/hit.sh &
echo $!>/var/run/hit.pid
;;
stop)
kill `cat /var/run/hit.pid`
rm /var/run/hit.pid
;;
restart)
$0 stop
$0 start
;;
status)
if [ -e /var/run/hit.pid ]; then
echo hit.sh is running, pid=`cat /var/run/hit.pid`
else
echo hit.sh is NOT running
exit 1
fi
;;
*)
echo "Usage: $0 {start|stop|status|restart}"
esac
exit 0
もちろん、サービスとして実行したいスクリプトはに移動する必要があり/usr/local/bin/hit.sh
、上記のコードはに移動する必要があります/etc/init.d/hitservice
。
このサービスを実行する必要がある各ランレベルに対応するシンボリックリンクを作成する必要があります。たとえば、シンボリックリンクという名前は/etc/init.d/rc5.d/S99hitservice
ランレベル5サービスを開始します。もちろん、service hitservice start
/を介して手動で開始および停止することもできます。service hitservice stop
答え2
CentOS 7以降がsystemdを使用していると思います。システムにこのような場合がある場合は、以下を試してください。
実行したいスクリプトコマンドを
/usr/bin/myscript
。スクリプトを実行可能にすることを忘れないでください
chmod +x
。次のファイルを生成します。
/etc/systemd/system/my.service
[Unit]
Description=My Script
[Service]
Type=forking
ExecStart=/usr/bin/myscript
[Install]
WantedBy=multi-user.target
すべてのシステムサービスファイルを再ロードします。
systemctl daemon-reload
スタートアップサービスを使用して正しく機能していることを確認してください
systemctl start my
。
ボーナス:
systemd サービスをテストするには、2 つのウィンドウで tmux 環境を起動できます。ここで、上部ウィンドウはスクリプト(stdout
およびstderr
)の出力を監視し、下部ウィンドウはサービスを再起動するために使用できます。これにはtmux
インストールが必要です。
tmux new-session \; select-layout even-horizontal \; split-window -v journalctl -o cat --since=@$(date +%s) -f -u my \; rotate-window \; set -g status-bg colour0 \; set -g status-fg colour9 \; attach
次に、次のコマンドを使用してサービスを再起動します。
systemctl restart my
tmux
終了を使用してctrl-d
からを使用しますctrl-c
。
スクリプトとサービスファイルが満足であれば、変更してください。
Type=forking
入力する
Type=simple
完璧。
答え3
以下はサービスとしてのスクリプトです。
[Unit]
Description=To change In test buffer
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/bin/test.sh
TimeoutStartSec=0
[Install]
WantedBy=default.target
答え4
以下のコードブロックは、Linuxスクリプトをサービスに変換するのに非常に便利です。
- root アクセス権でサーバーにログイン
- 以下を作成してくださいシステム必須サービスの単位ファイルと権限の変更は次のとおりです。
touch /lib/systemd/system/test.service
chmod 664 /lib/systemd/system/test.service
- 以下を追加してください。システムサービスを定義するユニットファイル
[Unit]
Description=Test Service
After=network.target
[Service]
Type=forking
User=#username
PIDFile=#test.pid_path
ExecStart=#startup_script_path
ExecStop=#shutdown_script_path
[Install]
WantedBy=multi-user.target
- サービスとして有効
systemctl daemon-reload
systemctl enable test.service
- 次のコマンドを使用して開始、停止、ステータス、および再起動
systemctl start test.service
systemctl stop test.service
systemctl status test.service
systemctl restart test.service