- 檔案開啟模式須為 I-O
- 另外需要注意的是,若要變更 KEY 值,先讀取舊 KEY 值資料,並給予新的 KEY 值。 此方法會 REWRITE 失敗,File Status 錯誤訊息為 23
- 只能 DELETE 舊 KEY 值資料,並 WRITE 新 KEY 值資料
- 由 Record Not Found 的錯誤訊息推論,執行 REWRITE 之前並不需要先 READ FILE,只需要先給定 KEY 值即可
* Update Data REWRITE FILE-REC
* Update Data REWRITE FILE-REC
* Change Physical File (CHGPF) CHGPF FILE(LIB/OBJ) SRCFILE(LIB/QDBFSRC) SRCMBR(OBJ_SRC)
#用 RSA 演算法產生 Key Pair ssh-keygen -t rsa #查看 keys ll ~/.ssh #Private Key 預設位置不用變更 #Public Key to Client B scp id_rsa.pub root@clientB:~/.ssh #Public Key to Client C scp id_rsa.pub root@clientC:~/.ssh #Public Key to Client D scp ip_rsa.pub root@clientD:~/.ssh
cd ~/.ssh cat id_rsa.pub >> authorized_keys chmod 644 authorized_keys
#!/bin/bash
# Master A 檔案路徑
localdir="/local/path"
# Client 端備份路徑
backupdir="/backups"
# Client 端 ip 位址
remoteip="192.168.100.252 192.168.100.253 192.168.100.254"
for ip in ${remoteip}
do
rsync -av ${localdir} -e ssh root@${ip}:${backupdir}
done
# 建立 crontab 工作,每十五分鐘差異備份一次 crontab -e 0-59/15 * * * * sh backup.sh
#設定刪除日期 deldate=$(date -d'3 months ago' +%Y%m%d) #刪除三個月前備份檔案 rm -f postgres."$deldate".tar.gz
cd /etc vi crontab
function exportToCSV( _csvString ) {
var downloadLink = document.createElement("a");
downloadLink.download = "dataTable.csv";
downloadLink.innerHTML = "Download File";
if (window.webkitURL != null) {
var code = encodeURIComponent( _csvString );
if ( navigator.appVersion.indexOf("Win")==-1 ) {
downloadLink.href = "data:application/csv;charset=utf-8," + code;
} else {
downloadLink.href = "data:application/csv;charset=utf-8,%EF%BB%BF" + code;
}
}
downloadLink.click();
}
function saveTextAsFile( _fileName, _text ) {
var textFileAsBlob = new Blob([_text], {type:'text/plain'});
var downloadLink = document.createElement("a");
downloadLink.download = _fileName;
downloadLink.innerHTML = "Download File";
if (window.webkitURL != null) {
// Chrome allows the link to be clicked
// without actually adding it to the DOM.
downloadLink.href = window.webkitURL.createObjectURL(textFileAsBlob);
} else {
// Firefox requires the link to be added to the DOM
// before it can be clicked.
downloadLink.href = window.URL.createObjectURL(textFileAsBlob);
downloadLink.onclick = destroyClickedElement;
downloadLink.style.display = "none";
document.body.appendChild(downloadLink);
}
downloadLink.click();
}
function destroyClickedElement(event) {
document.body.removeChild(event.target);
}
#!/bin/bash #設定時間變數 day=$(date +%Y%m%d) #設定備份路徑 bkdir="/home/user/dbbackup" #備份資料庫 pg_dump -h 127.0.0.1 -p 5432 -U postgres postgres>"$bkdir"/postgres.dump #移動到備份目錄 cd "$bkdir" #壓縮資料庫並加上日期 tar -zcf postgres."$day".tar.gz postgres.dump #刪除備份檔 rm postgres.dump exit 0
module.exports = {
sendEmail: function(_recipient, _subject, _html, _callback) {
var nodemailer = require('nodemailer');
var smtpTransport = require('nodemailer-smtp-transport');
var config = require("../config/config");
var transporter = nodemailer.createTransport(smtpTransport({
host: config.smtp.host,
port: config.smtp.port,
auth: {
user: config.smtp.user,
pass: config.smtp.pwd
}
}));
transporter.sendMail({
from: 'sender@domain.org.tw',
to: _recipient,
subject: _subject,
html: _html
}, function(err, info) {
_callback(err, info);
});
}
}
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'sender@gmail.com',
pass: 'password'
}
});
用 forever 監控 nodejs 服務
但是當 ubuntu 重啟後
forever 並不會重啟原本監控中的服務
導致監控中的 nodejs 服務中斷
因此編輯 shell script 設定 ubuntu 重啟後
forever 重新監控 nodejs 服務
在 ubuntu 路徑 /etc/init.d 下,
增加 run_forever.sh
************檔案內容開始************
forever start /var/nodejs/app.js
************檔案內容結束************
編輯完 shell script 後
還需要執行以下兩個指令
最後重開機做測試,重開機指令
sudo reboot
重啟 ubuntu 之後,可用 forever list 指令觀察 nodejs 是否有執行服務
<Virtual *:80>
ProxyRequests off
<Proxy *>
Order deny,allow
Allow from all
</Proxy*>
ProxyPass /api http://localhost:2368
ProxyPassReverse /api http://localhost:2368
</Virtual>
var express = require('express');
var app = express();
app.get('/', function(req, res) {
res.send("Welcome nodejs and express app api");
});
app.listen(2368);
var jsonArray = [
{name: 'Alice', id: 001},
{name: 'Bob', id: 002},
{name: 'Namei', id: 003}
];
function findAndRemove(array, property, value) {
for (var key in array) {
if (array[key][property] == value) {
array.splice(key, 1);
}
}
}
/* remove a json object with property of 'name' whose value is 'Namei' */
findAndRemove(jsonArray, 'name', 'Namei');
<div>
<p>This is a heading</p>
<div id="one" class="foo"></div>
<div id="two" class="foo"></div>
<div id="three" class="foo"></div>
</div>
以CSS Syntax來講, .foo:nth-child(2) 會找到 div#one ,:nth- selectors is strictly derived from the CSS specification
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort(); // output is Apple,Banana,Mango,Orange
var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort(); fruits.reverse(); // output is Orange,Mango,Banana,Apple
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return a-b});
// output is 1,5,10,25,40,100
var points = [40,100,1,5,25,10];
points.sort(function(a,b){return b-a});
// output is 100,40,25,10,5,1
##### 上述例子為 w3shools Example #####
var student = [{name: "Tom", score: 80}
, {name: "Mary", score: 70}
, {name: "Cathy", score: 90}];
student.sort(function(a,b){return a.score-b.score});
// output is [{name: "Mary", score: 70},
// {name: "Tom", score: 80},
// {name: "Cathy", score: 90}]
var student = [{name: "Tom", score: 80}
, {name: "Mary", score: 70}
, {name: "Cathy", score: 90}];
student.sort(function(a,b){return a.name > b.name});
// output is [{name: "Cathy", score: 90},
// {name: "Mary", score: 70},
// {name: "Tom", score: 80}]
$('item').keyup(function(event) {
if (event.which == 46) {
// to do delete file
}
});
$('.icon').click({
var e = $.Event('keyup');
e.which = 46; // Delete
$('item').trigger(e);
});
downloadFile = function( _fileUrl ) {
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr) {
xhr.open('GET', _fileUrl, true);
}
else if (typeof XDomainRequest != "undefined") {
xhr = new XDomainRequest();
xhr.open('GET', _fileUrl );
}
xhr.responseType = "blob";
xhr.onreadystatechange = function () {
if (xhr.readyState == 4) {
var a = document.createElement('a');
a.href = window.URL.createObjectURL(xhr.response);
a.download = fileName;
a.click();
}
};
xhr.send();
}
app.configure(function(){
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', "*");
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Methods', "GET");
next();
});
});
res.header('Access-Control-Allow-Headers', 'X-Requested-With');
var http = require("http");
function onRequest(request, response) {
console.log("Request received.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello World");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
第一行code很簡單,呼叫Node.js內建http模組並存入http變數。
var http = require("http"),
url = require("url");
function start() {
function onRequest(request, response) {
var pathname = url.parse(request.url).pathname;
console.log("Request for " + pathname + " received.");
response.writeHead(200, {"Content-Type": "text/plain"});
response.write("Hello Node.js");
response.end();
}
http.createServer(onRequest).listen(8888);
console.log("Server has started.");
}
exports.start = start;