やりたいこと
- 【こちらから】無料枠でGCEを起動したい
- 【こちらから】SSHの22番ポートを3333番ポートに変更したい
- 【こちらから】GCE(仮想マシン) 内の Python(Ubuntu) でSeleniumを使ったスクレイピング
- 【こちらから】取得したファイルをGoogle Driveにアップロード
- 【このページ】スクレイピングを cron で定期的に実行する
- 【このページ】指定の時間にインスタンスをオン/オフする
全体図
1ヵ月周期でスクレイピングをする設定
接続先で cron の設定をするコマンドを入力
crontab -e
crontab の実行が初めての場合はエディタを選択するように言われる
Select an editor. To change later, run 'select-editor'.
ここでは vim.basic を選択する
次に、毎月 1日の 0:00に qiita.py を実行する設定を追加する
0 0 1 * * python3 /home/hogehoge/scrape/qiita.py
# Edit this file to introduce tasks to be run by cron.
#
~ 省略
~ 省略
~ 省略
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
0 0 1 * * python3 /home/hogehoge/scrape/qiita.py
保存したらこれで cron の設定おわり。簡単。
typoしてcronの設定消えちゃった...!
とならないように、crontab -r
の対策
vim ~/.bashrc
以下の1行を追加して保存
alias crontab="crontab -i"
編集した内容を反映する
source ~/.bashrc
間違えて crontab -r
と入力しても「本当に消すのか?」と確認してくれる
crontab -r
# crontab: really delete hogehoge's crontab? (y/n)
日付変わったら動くように設定したのに朝の9時に動いた!
とならないように、タイムゾーンの設定を変更
timedatectl set-timezone Asia/Tokyo
sudo systemctl restart cron
VM インスタンスを自動で起動・停止をする設定
- VM インスタンスが作成済みであることを想定して話を進めます
もう少しマシンパワーが欲しいとき、無料枠を超えたつよつよマシンで動かすと思うのですが
料金体系が従量課金制なので動かしてない間もお金がかかります。
簡単に言うと、誰も見てないテレビがつけっぱだとお金がかかるので自動でオンオフしよう的な。
インスタンスが止まってしまえば不正アクセス等も出来ないはずなので、無料枠だけの運用しかしない場合も設定する価値はあると思います
① VM インスタンスにタグを追加する
- 画面左上、Google Cloud ロゴの左にある ナビゲーション メニュー から すべてのプロダクトを表示
- コンピューティングの Compute Engine を選択
-
インスタンス名 をクリック
-
編集 をクリック
-
ラベルの追加 をクリック
-
キー:
env
値dev
と入力
- 画面右下のSAVE、画面左下の保存する をクリック
② Cloud Scheduler と Cloud Functions の設定
上記ガイドの Cloud Functions を介して Pub/Sub によってトリガーされる関数をデプロイする
から クリーンアップ
手前までを進めていけば設定できます
メモ
-
VM インスタンスを自動で起動・停止をする設定
これに関して、インスタンス スケジュール
という別機能でも同じようなことができるが融通が利かない
例えば、時間・曜日を変更したいときに1から作り直しが必要 - cron の設定でファイルのパスを絶対パスにしないとエラーが発生する
参考先