구글링을 하다가 apt 명렁어를 이용하여 패키지를 다운받는 경우를 종종 봤습니다. 처음에는  단순히 apt-get 을 줄여놓은 것으로 생각했었는데 아니더군요.


사실 apt 와 apt-get 은 다른 패키지 관리자이지만 하는 일이나 명령어들은 거의 비슷합니다. (아예 코드부터가 다릅니다)


인터페이스는 약간 다릅니다. 그리고 apt-get이 먼저 나오고 apt 가 나중에 나왔습니다.


apt-get 과 apt-cache 를 하나의 명령어로 사용하기 위해 apt 가 탄생했다더군요.


결과적으로는 굳이 그 둘을 구분해서 사용하지는 않아도 된다는 것입니다.


이것도 마찬가지로 상황에 따라 달라질 수 있겠습니다만...

블로그 이미지

NCookie

,
1. Using PPA 

sudo apt-add-repository ppa:octave/stable 

sudo apt-get update 


sudo apt-get install octave 




2. Compiling the source yourself 


sudo apt-get build-dep octave 


wget ftp://ftp.gnu.org/gnu/octave/octave-4.0.0.tar.gz 


tar xf octave-4.0.0.tar.gz 


cd octave-4.0.0/ 


./configure 


make 


 sudo make install 



 Run octave-cli on your terminal to verify.




저는 1번 방법으로 깔끔하게 설치했습니다.


버전은 4.0 이고 터미널에서 octave-cli 으로 사용할 수 있습니다. 


.m 확장자를 가진 파일을 실행시킬 수 있습니다.




출처 


http://unix.stackexchange.com/questions/280195/how-to-install-octave-without-gui-in-ubuntu-16-04

블로그 이미지

NCookie

,

[리눅스] ds, df

리눅스 2016. 12. 2. 15:45

df : 남은 디스크의 용량을 확인

-h 단위를 사용하여 보여줌(KB, MB, GB 등)



du : 현재 디렉터리에서 사용중인 용량 확인

-h 단위를 사용하여 보여줌(KB, MB, GB 등)


블로그 이미지

NCookie

,
1. boot-repair 사용하기

$ sudo add-apt-repository ppa:yannubuntu/boot-repair
$ sudo apt-get update
$ sudo apt-get install -y boot-repair

$ boot-repair

Recommended repair (repairs most frequent problems)


2. Try Ubuntu without installing

  1. 우분투 설치 없이 실행

  2. 터미널 창에서 명령어 입력
    sudo fdisk -l
    명령어를 입력하고 나면 부트로더가 설치된 디스크를 알 수 있을 것이다. 이 디스크의 경로를 기억하자.

  3. 홈 디렉터리에 임시 폴더를 만듦 ( /home/ubuntu/temp )
  4. sudo mount /dev/sda5 /home/ubuntu/temp ( 부트로더가 /dev/sda5에 설치되어 있을 때

  5. 마운트가 되었는지 확인하기 위해서는 임시 디렉터리에 들어가보자. 제대로 되었다면 '/' 디렉터리로 이동해있을 것이다.

  6. grub를 설치하자

    sudo grub-install --root-directory=/home/ubuntu/temp /dev/sda

    여기서 /dev/sda는 하드 디스크 이름이다.  sudo fdisk -l 명령어를 입력했을 때 각자의 상황에 맞게 대체하자.

  7. 이제 끝이다. 다시 시작하자.



3. In Grub Rescue

no such as device...

grub rescue> ls
(hd0) (hd1) (hd1,gpt1) (hd1,gpt2) ......
부트로더가 설치된 파티션을 선택하자.

grub rescue> ls (hd1,gpt10)/
/boot ......
(ls와 그 다음 단어 사이에 공백이 있다)

위와 같이 /boot 폴더가 보이는 파티션이 리눅스 boot 파티션이다. 이제 아래와 같이 하면 Grub으로 부팅할 수 있다.

grub rescue> set prefix=(hd1,gpt10)/boot/grub
grub rescue> insmod normal
grub rescue> normal

이제 우분투 Grub으로 정상 부팅하게 된다. 우분투로 부팅 후, 첫번째 하드디스크에 우분투가 설치되어 있다는 가정하에 아래 두개의 명령으로 Grub이 복구된다.

$ sudo grub-install /dev/sda
(grub-install 공백 /dev/sda)
$ sudo update-grub

위의 첫번째 명령은 UEFI 방식이든 BIOS 방식이든 Grub이 사용자들에게 일관된 명령을 사용하도록 유도하려는 목적인 듯하다. 실제로는 UEFI와 BIOS 모드의 grub은 서로 다른 패키지이고, 세부 명령 파라메터도 아래의 UEFI 모드에서의 grub-install 명령이 매우 복잡한 것에서 알 수 있듯이 명령 자체가 다르게 수행된다.


참고링크

1. boot-repair 사용하기


2. Try Ubuntu without installing


'리눅스' 카테고리의 다른 글

[우분투] apt / apt-get 차이  (2) 2016.12.25
우분투 16.04 Octave 설치  (0) 2016.12.09
[리눅스] ds, df  (0) 2016.12.02
[리눅스] crontab 사용 시 주의할 점 및 해결법  (0) 2016.10.26
[리눅스] 반복 예약작업 crontab  (0) 2016.10.20
블로그 이미지

NCookie

,

  분명 규칙에 맞게 했는데 crontab이 정상적으로 실행되지 않는 경우가 있습니다. 그래서 인터넷으로 검색도 해보고 직접 실험도 해서 안 되는 이유를 찾아보았습니다.



원인


1. 환경변수 


  아마 대부분의 문제가 여기에 해당하지 않을까 생각합니다. cron은 별도로 쉘을 띄우기 때문에 프로그램을 실행하기 위해 관련된 환경변수들을 설정해야 한다고 합니다.


2. 권한 문제


  crontab을 설정하는 방법에는 크게 두 가지가 있는데 하나는 /etc/crontab에서 직접 수정하는 것이고 나머지 하나는 crontab -e 명령을 통해 하는 것입니다.


  이 중 vim /etc/crontab 에서 root 권한 명령어를 실행하기 위해서는 root 권한을 명시해줘야 합니다. 반면 crontab -e로 cron을 수정할 때에는 root 권한을 명시할 필요가 없습니다.


vim /etc/crontab        */30 * * * * root /home/hello/test.sh

crontab -e                */30 * * * * /home/hello/test.sh


3. 절대경로 / 상대경로 


   제가 이번에 프로젝트를 진행하면서 한 큰 실수가 있는데 바로 프로그램의 테스트와 config 파일을 상대경로로 해놓고 crontab 에서는 절대경로를 사용했었습니다. 그래서 테스트 할 때 절대경로로 했더니 오류가 뜨더군요;;


  그렇기 때문에 crontab 에 추가하기 전에 절대경로로 먼저 테스트 해보시는 것을 추천합니다.


4. 최소 반복 시간


  그리고 이건 거의 해당하는 일이 없으실거라 생각하는데 crontab의 최소 반복시간은 1분입니다. 따라서 그 보다 작은 시간으로 하려고 하면 당연히 안 되겠지요.






해결방법



  지금부터 위의 오류들을 해결할 수 있는 방법들에 대해서 소개하겠습니다. 언어는 파이썬을 사용할 것입니다.



  우선 환경 변수의 문제에 대해서 입니다. 위에서 언급했다시피 crontab은 별도의 쉘을 띄우기 때문에 별도의 환경변수 설정이 필요합니다. 자세한 내용은 여기에서 보시면 될 것 같습니다. 그리고 환경 변수를 설정하고 crontab 을 설정하는 방법은 아래와 같습니다.

SHELL=/bin/bash
*/10 * * * * source /path/to/virtualenv/bin/activate && /path/to/build/manage.py some_command

  쉘의 경로를 설정하고 10분마다 virtualenv를 activate 하고 manage.py 스크립트를 실행하는 코드입니다. 여기서 핵심은 첫 번째 줄의 SHELL=/bin/bash 이겠지요.


  만약 프로젝트가 virtualenv 내에 있다면 파이썬의 경로를 명시해 줘야 할 수도 있을 것입니다.



  위의 방법들로도 해결이 되지 않는다면 파이썬 스크립트의 맨 위에

#!/home/my/virtual/bin/python
코드를 넣어 보세요. 인터프리터에게 어떤 경로의 파이썬을 사용할 것인지 알려주는 부분입니다.  관련 내용은 이 링크 에서 보실 수 있습니다.
/home/my/virtual/bin/python
  위와 같이 말이죠. 그리고 스크립트를 실행하다가 오류가 발생한 것을 로그로 남기고 싶다면 다음과 같이 하면 됩니다.
python /home/my/project/manage.py > /path/to/cronlog.log 2 > &1
  위의 내용은 이 링크의 내용 기반으로 작성하였습니다.

  그리고 가장 중요한 것이 있는데 crontab -e 또는 vim /etc/crontab 를 통해 저장하고 난 이후 service crond restart 를 해야하는 것입니다. 새로운 작업을 등록해 놓고 서비스를 다시 시작하지 않으면 적용이 되지 않기 때문입니다.


PS.

  이건 제가 직접 해보지 않아서 확실하지 않은 방법입니다만, 명령어들을 crontab에 직접 입력하는 것이 아닌 쉘 파일에서 작성한 후 crontab에서 그 쉘을 실행시키는 것입니다. 이렇게 하면 제대로 실행된다고 하는데 제 생각으로는 저 방법이 자동으로 SHELL=/bin/bash 를 자동으로 해주기 때문인 것 같습니다.

  위 내용의 출처는 여기입니다. 



+ 추가  (2016. 10. 30)

저 같은 경우에는 /etc/crontab 파일을 수정하여 프로세스를 등록하였고 환경변수를


SHELL=/bin/sh

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


와 같이 설정하였습니다.



'리눅스' 카테고리의 다른 글

[우분투] apt / apt-get 차이  (2) 2016.12.25
우분투 16.04 Octave 설치  (0) 2016.12.09
[리눅스] ds, df  (0) 2016.12.02
[우분투] 멀티부팅 되지 않을 때 해결법  (0) 2016.11.02
[리눅스] 반복 예약작업 crontab  (0) 2016.10.20
블로그 이미지

NCookie

,

crontab


  요즘 파이썬으로 페이스북의 데이터를 분석하여 트렌드를 검출하는 프로젝트를 진행하고 있다. 데이터를 분석하기 위해서는 일정 시간 간격으로 데이터를 수집해야만 했고 그를 위해서 서버가 필요했다. 그래서 개인적으로 서버컴을 가지고 계신 선생님께 양해를 구하고 원격 접속을 하여  아무래도 django를 처음으로 써보고 그것을 jython 환경에서 돌려야 하다보니 이래저래 시행착오를 많이 겪었다.


  하지만 이러한 삽질들을 모두 무효로 만들어 버리는 명령어가 있었으니 crontab 이다. crontab은 리눅스에서 사용할 수 있는 작업 스케줄러로 프로세스를 예약하고 데몬에서 돌아간다. 이것은 특이한 문법을 통하여 프로세스를 실행할 시간을 지정할 수 있다.


  등록하는 방법은 어렵지 않은데 그 전에 시간을 지정하는 방법을 먼저 알아보자


등록형식


* * * * * [수행할 명령어]


인데 첫 번째 별부터 분(0 - 59), 시(0 - 23), 일(1 - 31), 월(1 - 12), 요일(0 - 6, 0 = 일요일)을 의미한다. 예제를 한 번 살펴

보자.


1분마다 test.sh 스크립트를 실행한다.


매시 1분마다 test.sh 스크립트를 실행한다.(00시 1분, 01시 1분, 02시 1분...)


1시부터 23시까지 6시간마다 test.sh 스크립트를 실행한다. (01시 30분, 07시 30분, 13시 30분, 19시 30분)


여러 개의 명령어를 사용하고 싶다면 && 를 사용하여 연결할 수 있다. 위의 예제에서는 가상환경을 activate하고 스크립트를 실행한다.


옵션


스크립트 등록


crontab -e

실행할 프로세스 등록. 만약 기존에 예약한 작업이 없다면 편집기를 선택하라고 나오는데 무난하게 2번으로 하면 될 듯하다. 그리고 에디터에서 위의 예제와 같은 코드를 등록하고 Ctrl + X 를 하면 저장이 된다.


crontab -l

예약한 코드를 볼 수 있다.


crontab -r

현재 사용자의 모든 예약작업을 삭제한다.


참고링크


http://zetawiki.com/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4_%EB%B0%98%EB%B3%B5_%EC%98%88%EC%95%BD%EC%9E%91%EC%97%85_cron,_crond,_crontab

블로그 이미지

NCookie

,