Linuxの起動時にbashスクリプトを実行しようとしても機能しません。私はcrontabで次のコマンドをすべて試しました。
@reboot bash /home/user/mysqlamazon.sh
@reboot sh /home/user/mysqlamazon.sh
@reboot /home/user/mysqlamazon.sh
@reboot sleep 60 && /home/user/mysqlamazon.sh
完全に動作するcrontabのための別のコマンドがあります。
@reboot pwsh file.ps1
私も次のコマンドを試しました。
@reboot pwsh file.ps1 && sh /home/user/mysqlamazon.sh
このうち何も動作しません!どんな助けでも大変感謝します!
以下はbashスクリプトの内容です。
while($true)
do
./transfermysql.sh > file.txt
bcp tablename in file.txt -S ***********.com,**** -U **** -P *********** -d ********* -c
:> file.txt
sleep 60
done
答え1
これがどのように失敗したかは教えてくれませんでしたが、実行されている様子は見えなかったようです。
while($true)
まず、有効なシェル構文ではないため、スクリプトは機能しません。私はあなたが次のことをしたいと仮定します:
true=1
while(($true)); do ... ; done
より一般的なイディオムは次のとおりです。
while : ; do ... ; done
または(true
はコマンドです):
while true; do ... ; done
これは、スクリプトで相対パスを使用している可能性があります。
./transfermysql.sh > file.txt
フルパスに置き換えます。
/path/to/transfermysql.sh > /path/to/file.txt
次に、cronのPATHにないと思われるので、フルパスbcp
も使用してください。
/path/to/bcp tablename in file.txt -S ***********.com,**** -U **** -P *********** -d ********* -c
最後に、最初のコマンドが内容を上書きするので、これをしたい理由がわかりません:> file.txt
。ただし、何らかの理由で必要な場合は、そこでもフルパスを使用する必要があります> /path/to/file.txt
。
答え2
cron
ジョブは、またはを介してat
実行されるか、batch
デスクトップの同じランタイム環境では実行されません。変更やその他の環境変数の設定は、ジョブにPATH
自動的に伝播されませんcron
。たとえば、no$DISPLAY
なので、GUIプログラムには特別な処理(読み取りman xhost
)が必要です。
cron
環境変数は、すべてのジョブの読み取りファイルで設定できます。crontab
man 5 crontab
echo "=== set ===";set;echo "=== env ===";env | sort;echo "=== alias ===";alias
各環境の結果を確認してください。
その行はデフォルトで解釈されるため、構文はcommand
それよりも単純なので、環境を設定した後に必要なプログラムを呼び出すスクリプト(実行可能、インストール、開始)を呼び出すことをお勧めします。crontab
/bin/sh
/bin/bash
command
bash
#!/bin/bash