Merge branch '1868-tutorial-running-binary-progs'
[arvados.git] / doc / user / tutorials / running-external-program.textile
1 ---
2 layout: default
3 navsection: userguide
4 navmenu: Tutorials
5 title: "Running external programs"
6 navorder: 18
7 ---
8
9 h1. Running external programs
10
11 This tutorial demonstrates how to use Crunch to run an external program by writting a wrapper using the Python SDK.
12
13 *This tutorial assumes that you are "logged into an Arvados VM instance":{{site.basedoc}}/user/getting_started/ssh-access.html#login, and have a "working environment.":{{site.basedoc}}/user/getting_started/check-environment.html*
14
15 Start by entering the @crunch_scripts@ directory of your git repository:
16
17 <notextile>
18 <pre><code>$ <span class="userinput">cd you/crunch_scripts</span>
19 </code></pre>
20 </notextile>
21
22 Next, using your favorite text editor, create a new file called @run-md5sum.py@ in the @crunch_scripts@ directory.  Add the following code to compute the md5 hash of each file in a collection:
23
24 <pre><code class="userinput">{% include run-md5sum.py %}</code></pre>
25
26 Make the file executable:
27
28 notextile. <pre><code>$ <span class="userinput">chmod +x run-md5sum.py</span></code></pre>
29
30 Next, add the file to @git@ staging, commit and push:
31
32 <notextile>
33 <pre><code>$ <span class="userinput">git add run-md5sum.py</span>
34 $ <span class="userinput">git commit -m"run external md5sum program"</span>
35 $ <span class="userinput">git push origin master</span>
36 </code></pre>
37 </notextile>
38
39 You should now be able to run your new script using Crunch, with "script" referring to our new "run-md5sum.py" script.
40
41 <notextile>
42 <pre><code>$ <span class="userinput">cat &gt;the_job &lt;&lt;EOF
43 {
44  "script": "run-md5sum.py",
45  "script_version": "you:master",
46  "script_parameters":
47  {
48   "input": "c1bad4b39ca5a924e481008009d94e32+210"
49  }
50 }
51 EOF</span>
52 $ <span class="userinput">arv -h job create --job "$(cat the_job)"</span>
53 {
54  ...
55  "uuid":"qr1hi-xxxxx-xxxxxxxxxxxxxxx"
56  ...
57 }
58 $ <span class="userinput">arv -h job get --uuid qr1hi-xxxxx-xxxxxxxxxxxxxxx</span>
59 {
60  ...
61  "output":"4d164b1658c261b9afc6b479130016a3+54",
62  ...
63 }
64 </code></pre>
65 </notextile>