Introduction
If you want to host some ever-running script, what option do you have?
- Run on your laptop, and never sleep / off it (??)
- Get a Raspberry Pi (ugh.. overkill)
- Pay a few dollars to host it somewhere (few dollars to host something so small.. worth?)
- Ask your friend to run on his/her laptop and never off it.
Option 4 seems to be the best option if you manage to convince.
Fortunately I have the opportunity of abusing my personal VM at work. I mean, not abusing, it's somewhat related to work too. I'm sure.
How
These are roughly the steps I took:
Clone the repo
Clone the repo into the VM. My path is ~/xuanbot
.
Start running, but..
We cannot just run it with the usual go run main.go
, because if we do that, the process will hang up when we exit the ssh conenction.
Instead, we can do
$ nohup go run main.go &
xuanze.ang@n36-172-051:~/xuanbot$ nohup go run main.go &
[1] 670740
xuanze.ang@n36-172-051:~/xuanbot$ nohup: ignoring input and appending output to 'nohup.out'
At this point, the process is running.
Find the process id
Next, we need to know what is the process id of our task.
$ ps -ef | grep go
xuanze.ang@n36-172-051:~/xuanbot$ nohup: ignoring input and appending output to 'nohup.out'
ps -ef | grep go
root 1411 1 0 Nov07 ? 00:01:56 /etc/sysop/mongoosev3-agent/mongoosev3-agent
root 3888 1411 0 Nov07 ? 00:00:36 /etc/sysop/mongoosev3-agent/plugin/driver/driver
root 3896 1411 0 Nov07 ? 00:00:07 /etc/sysop/mongoosev3-agent/plugin/journal_watcher/journal_watcher
root 3945 1411 0 Nov07 ? 00:01:02 /etc/sysop/mongoosev3-agent/plugin/collector/collector
root 4016 1411 0 Nov07 ? 00:00:49 /etc/sysop/mongoosev3-agent/plugin/baseline/baseline
xuanze.+ 670740 670583 0 11:32 pts/0 00:00:00 go run main.go
xuanze.+ 670844 670740 99 11:32 pts/0 00:00:37 /tmp/go-build2256816827/b001/exe/main
xuanze.+ 671173 670583 0 11:32 pts/0 00:00:00 grep go
We can see that our build is running as pid 670844
for 37 seconds now.
Kill it
Since we have enough information now, kill it!
kill 670844
Process should now be killed and removed from the list. Done!
Bonus
Useful command to move a file from local to ssh machine.
scp <origin file path> <name>@<host>:<destination file path>
$ scp /Users/xz/file.txt xuanze.ang@1.1.1.1/home/xuanze.ang
file.txt 100% 11KB 47.6KB/s 00:00